首页 > 其他分享 >二叉树前中后序递归遍历完整代码【超简单易懂】

二叉树前中后序递归遍历完整代码【超简单易懂】

时间:2022-12-16 11:23:53浏览次数:48  
标签:traverse 遍历 前中 rch 二叉树 NULL data lch

//二叉树的前中后序遍历【递归法】 
#include <iostream>
using namespace std;


//结点结构体 
typedef struct BTnode{
	
	char data;     //自己的数据 
	BTnode * lch;  //左孩子 
	BTnode * rch;  //右孩子 
	
	
}BTnode,* BTree;

//前序遍历【根左右】  前中后代码理解完全一样
void pre_traverse(BTree &T){ 

	if(T==NULL){
		return ;
	}

	//根 [只需要输出根]
	cout<<T->data<<" ";
	
	//左
	pre_traverse(T->lch);
		
	//右 
	pre_traverse(T->rch);
}

//中序遍历【左根右】
void mid_traverse(BTree &T){
	if(T==NULL)
		return ;
		
	mid_traverse(T->lch);
	cout<<T->data<<" ";
	mid_traverse(T->rch);
}

//后序遍历 【左右根】 
void last_traverse(BTree &T){
	if(T==NULL)
		return ;
	
	last_traverse(T->lch);
	last_traverse(T->rch);
	cout<<T->data<<" ";
	
}


int main()
{
	//创建七个空结点 
	BTnode* NodeA=new BTnode;
	BTnode* NodeB=new BTnode;
	BTnode* NodeC=new BTnode;
	BTnode* NodeD=new BTnode;
	BTnode* NodeE=new BTnode;
	BTnode* NodeF=new BTnode;
	BTnode* NodeG=new BTnode;
	
	//给七个结点赋自己的值
	NodeA->data='A';
	NodeB->data='B';
	NodeC->data='C';
	NodeD->data='D';
	NodeE->data='E';
	NodeF->data='F';
	NodeG->data='G';
	
	//给七个结点弄好关系 别忘记每个结点的空关系也要写,必须!
	NodeA->lch=NodeB;
	NodeA->rch=NodeC;
	NodeB->lch=NULL;
	NodeB->rch=NodeD;
	NodeC->lch=NodeE;
	NodeC->rch=NodeF;
	NodeD->lch=NULL;
	NodeD->rch=NULL;
	NodeE->lch=NULL;
	NodeE->rch=NodeG;
	NodeF->lch=NULL;
	NodeF->rch=NULL;
	NodeG->lch=NULL;
	NodeG->rch=NULL;
	
	//前序遍历 
	cout<<"前序遍历:";
	pre_traverse(NodeA); 
	cout<<endl;
	
	//中序遍历 
	cout<<"中序遍历:";
	mid_traverse(NodeA);
	cout<<endl;
	
	//后序遍历 
	cout<<"后序遍历:";
	last_traverse(NodeA);
	cout<<endl;
	
	
	
	
	return 0;
}

标签:traverse,遍历,前中,rch,二叉树,NULL,data,lch
From: https://www.cnblogs.com/kathryn921/p/16986860.html

相关文章

  • python使用遍历文件夹文件
    python使用遍历文件夹文件一,遍历函数os.walk(rootdir):#返回三个参数:分别返回1.父目录2.所有文件夹名字(不含路径)3.所有文件名字二,使用importosimportos.pa......
  • 104. 二叉树的最大深度
    给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null......
  • 对称的二叉树
    请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。/***Definitionforabinarytreenode.*structTreeNode{*......
  • 二叉树的镜像
    输入一个二叉树,将它变换为它的镜像。 /***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*r......
  • 剑指Offer-Java-二叉树的镜像
    题目题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树8/\610/\/\57911......
  • 剑指Offer-Java-重建二叉树
    题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍......
  • 剑指Offer-Java-序列化二叉树
    题目请实现两个函数,分别用来序列化和反序列化二叉树代码此题的核心点是如何表示二叉树,并且解释。/*publicclassTreeNode{intval=0;TreeNodeleft=null;......
  • 94. 二叉树的中序遍历
    给定一个二叉树的根节点root,返回它的中序遍历。示例1:输入:root=[1,null,2,3]输出:[1,3,2]点击查看代码definorderTraversal(self,root):res......
  • 力扣-114-二叉树展开为链表
    按照先序遍历展开展开后仍然为TreeNode,只是左孩子指针一律置空关键在于这个先序的访问过程与各个节点指针的修改操作如何统一不冲突首先就可以排除先序遍历,瞄一眼评论......
  • 数据结构 线索二叉树
    一、线索二叉树的原理    通过考察各种二叉链表,不管儿叉树的形态如何,空链域的个数总是多过非空链域的个数。准确的说,n各结点的二叉链表共有2n个链域,非空链域为n-1个,......