首页 > 其他分享 >二叉树的前序、中序、后序、层序遍历

二叉树的前序、中序、后序、层序遍历

时间:2023-11-12 22:00:45浏览次数:22  
标签:结点 遍历 中序 Queue 访问 二叉树 root 前序 rear

在写遍历函数前,我们需要知道这几种遍历方法的访问结点的顺序。

  • 前序遍历:
    1.先访问根节点。
    2.再访问左子树。
    3.最后访问右子树。
  • 中序遍历:
    1.先访问左子树。
    2.在访问根结点。
    3.最后访问右子树。
  • 后序遍历:
    1.先访问左子树。
    2.在访问右子树。
    3.最后访问根结点。
  • 层序遍历:
    按照二叉树的层次遍历,每层依次从左至右。

对于前序、中序、后序遍历函数,我们可以这样写:

int PreOrder(Node *root){//前序遍历函数
      if(root==nullptr){
        return 0;
      }else{
        cout<<root->data;        //输出当前结点的数值   I式
        PreOrder(root->lchild);  //访问当前结点的左子树 II式
        PreOrder(root->rchild);  //访问当问结点的右子树 III式
      }
}

而对于中序、后序遍历函数无非是改变一下I式、II式、III式的顺序,这里就不再赘述。

重点来了!!!

层序遍历函数,需要用到队列的知识,因为在对二叉树层序遍历时就非常满足队列的性质。
//层序遍历
void Tree::LeverOrder() {
	Node *Queue[20];                //定义一个数组指针,用来存储入队的结点指针
	Node* q = nullptr;              //定义一个临时指针
	int front = -1, rear = -1;      //front、rear是指示器,用来指示Queue的下标
	if (root == nullptr) {
		return ;
	}
	Queue[++rear] = root;
	while (front != rear) {
		q = Queue[++front];
		cout << q->data;
        //如果根节点的左、右子树非空就入队
		if (q->lchild != nullptr) {
			Queue[++rear] = q->lchild;
		}
		if (q->rchild != nullptr) {
			Queue[++rear] = q->rchild;
		}
	}
}

标签:结点,遍历,中序,Queue,访问,二叉树,root,前序,rear
From: https://www.cnblogs.com/zhzbubai/p/17827662.html

相关文章

  • 数据结构之树(树转化为二叉树也叫二叉化)
    说明对于将一般树结构转化为二叉树,使用的方法称为“Child-Sibling”(Leftmost-child-next-right-sibling)法则。步骤1.将节点的所有兄弟节点,用横线连接起来2.删掉所有与子节点间的链接,只保留与最左子节点的链接3.顺时针旋转45度 二叉树转化为多叉树与树转化为二叉树......
  • 面试必刷TOP101:25、二叉树的后序遍历
    题目题解importjava.util.*;/**publicclassTreeNode{*intval=0;*TreeNodeleft=null;*TreeNoderight=null;*publicTreeNode(intval){*this.val=val;*}*}*/publicclassSolution{/***代码中的类名、方......
  • 二叉树(周五实验)
    1#include<iostream>2#include<fstream>3usingnamespacestd;45typedefstructTreeNode6{7chardata;8intlevel;9TreeNode*lchid;10TreeNode*rchid;11}TreeNode;1213chararr[20][2];//存放结......
  • [左神面试指南] 二叉树[上]篇
    CDXXX用递归和非递归方式实现二叉树先序、中序和后序遍历❗publicclassCDbianli_1{publicstaticclassTreeNode{publicintval;publicTreeNodeleft;publicTreeNoderight;publicTreeNode(intnum){......
  • 面试必刷TOP101:24、二叉树的中序遍历
    题目题解深度优先搜索-递归publicclassSolution{/***代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可***@paramrootTreeNode类*@returnint整型一维数组*/publicint[]inorderTraversal(TreeNo......
  • 02_二叉树的迭代遍历
    二叉树的迭代遍历//前序遍历顺序:中-左-右,入栈顺序:中-右-左classSolution{publicList<Integer>preorderTraversal(TreeNoderoot){List<Integer>result=newArrayList<>();if(root==null){returnresult;}St......
  • 面试必刷TOP101:23、二叉树的前序遍历
    题目题解importjava.util.*;publicclassSolution{publicvoidpreorder(List<Integer>list,TreeNoderoot){//遇到空节点则返回if(root==null)return;//先遍历根节点list.add(root.val);//再去左子树......
  • 05-二叉树
    5.二叉树5.0二叉树递归套路1)假设以X节点为头,假设可以向X左树和X右树要任何信息2)在上一步的假设下,讨论以X为头节点的树,得到答案的可能性(最重要)3)列出所有可能性后,确定到底需要向左树和右树要什么样的信息4)把左树信息和右树信息求全集,就是任何一棵子树都需要返回的信息S5......
  • 二叉树前中后序遍历(递归和非递归)+层次遍历
    直接看代码啦!前中后指的是跟被访问的次序!递归很好理解,重点是非递归!!!1#define_CRT_SECURE_NO_WARNINGS2#include<iostream>3#include<fstream>4usingnamespacestd;56typedefstructTreeNode7{8intdata;9intflag;10str......
  • 全局平衡二叉树
    一种常数较小的能在单次\(O(\logn)\)时间内解决链修改链查询的数据结构。普通的LCT也是\(O(\logn)\)的,但是常数巨大。原因是它用辅助树维护了一个动态的虚实链剖分,在没有动态加边删边的问题中这显然是没有必要的。我们考虑将LCT强行静态化来减小长度。具体的,我们仍用......