二叉树的遍历实现(指针和数组)

tech2022-08-13  139

想想大学已经上了三年了,马上就要毕业,自己竟然还没有写过博客。写博客是我很早就想做的一件事情,但是一直因为其它事情(其实还是自己懒。。。)而没有把它付诸实践。

最近因为太无聊了(哈哈哈),也在复习数据结构,所以就想把它记录下来,以便日后复习可以用到,也希望对大家有点用吧。

以后会经常更新,希望可以养成一个好的习惯。

做一件事情最好的时刻是过去,其次是现在,想写博客的朋友也开始行动起来吧!

(不罗嗦了,进入正文)

 

 

二叉树的遍历是指通过一定顺序访问二叉树的所有结点。

遍历方法:先序遍历、中序遍历、后序遍历、层次遍历

访问顺序:

先序遍历:根结点--》左子树--》右子树

中序遍历:左子树--》根结点--》右子树

后序遍历:左子树--》右子树--》根结点

层次遍历:按层次顺序从根结点向下逐层进行遍历,且对同一层次的结点从左到右遍历

先序遍历

链表实现

void preorder(node *root){ if(root==NULL){ return; //到达空树,递归边界 } printf("%d\n",root->data); //访问左子树 preorder(root->lchild); //访问右子树 preorder(root->rchild); }

数组实现

void preorder(int root){ if(root==-1) return; printf("%d\n",Node[root].data); //访问左子树 preorder(Node[root].lchild); //访问右子树 preorder(Node[root].rchild); }

中序遍历

链表实现

void inorder(node *root){ if(root==NULL)} return; } //访问左子树 inorder(root->lchild) //访问根结点,例如将其数据输出 printf("%d\n",root->data); //访问右子树 inorder(root->rchild); }

数组实现

void inorder(int root){ if(root==-1) return; //访问左子树 inorder(Node[root].lchild); //访问根节点,例如将其数据输出 printf("%d\n",Node[root].data); //访问右子树 inorder(Node[root].rchild); }

后续遍历

链表实现

void postorder(node* root){ if(root==NULL){ return; } //访问左子树 postorder(root->lchild); //访问右子树 postorder(root->rchild); //访问根结点,例如将其数据输出 printf("%d\n",root->data); }

数组实现

void postorder(int root){ if(root==-1) return; //访问左子树 postorder(Node[root].lchild); //访问右子树 postorder(Node[root].rchild); //访问根节点,例如将其数据取出 printf("%d\n",Node[root].data); }

层次遍历

链表实现

void LayerOrder(node* root){ queue<node*> q; //注意队列里存放地址 q.push(root); //将根地址入队 while(!q.empty()){ node* now = q.front(); //取出队首元素 q.pop(); printf("%d\n",now->data); //访问队首元素 if(now->lchild!=NULL) q.push(now->lchild); //左子树非空 if(now->rchild!=NULL) q.push(now->rchild); //右子树非空 } }

数组实现

void LayerOrder(int root){ queue<int> q; //此处队列里存放结点下标 q.push(root); //将根结点地址入队 while(!q.empty()){ int now = q.front(); //取出队首元素 q.pop(); printf("%d\n",Node[now].data); //访问队首元素 if(Node[now].lchild !=-1) q.push(Node[now].lchild); //左子树非空 if(Node[now].rchild !=-1) q.push(Node[now].rchild); //右子树非空 } }

 

最新回复(0)