二叉树的创建与遍历

二叉树的遍历

  二叉树的遍历有三种方式:

  • 前序遍历(DLR):先访问根结点,再先序遍历左子树,最后先序遍历右子树。
  • 中序遍历(LDR):先访问左子树,再中序遍历根结点,最后中序遍历右子树。
  • 后序遍历(LRD):先后序遍历左子树,再后序遍历右子树,最后访问根结点。

二叉树

如图所示的二叉树,其先序遍历为:
              A(先遍历根结点)BDE(再先序遍历左结点)FC(最后先序遍历右结点).
         中序遍历为:
              DBE(先中序遍历左结点)A(再遍历根节点)FC(最后中序遍历右结点)
         后序遍历为:
             DEB(先后序遍历左结点)CF(再后序遍历右结点)A(最后遍历根节点)

根据二叉树的遍历逆推二叉树

    其基本方法是先序/后序遍历确定根,中序确定分布

eg1:先序遍历为:ABDGEHCF
    中序遍历为:GDBHEACF

在这里插入图片描述

eg2:后序遍历为DCEGBFHKJIA
中序遍历为DCBGEAHFIJK
其结果为下图所示:在这里插入图片描述

二叉树的创建与遍历

#include<bits/stdc++.h>
using namespace std;
struct node
{
	char data;
	struct node *lchild;//左子树 
	struct node *rchild;//右子树 
};

//方便书写用typedef重新命名 
typedef struct node BTNode;
typedef struct node* tree;

tree root=NULL;//创建一个根 

void pre_crt(tree &bt)//按先序输入二叉树 
{
	char ch;
	ch=getchar();
	if(ch!='#')//用#代替空 
	{
		bt=new node;//创造根结点 
		bt->data=ch;
		pre_crt(bt->lchild);//创建左子树
		pre_crt(bt->rchild);//创建右子树 
	}
	else bt=NULL;
} 
 
 void DLR(tree bt)//先序遍历
 {
 	if(bt==NULL)
 		return;
 		cout<<bt->data;
 		DLR(bt->lchild);
 		DLR(bt->rchild);
  } 
  
void LDR(tree bt)//中序遍历
 {
 	if(bt==NULL)
 		return;
 	LDR(bt->lchild);
	 	cout<<bt->data;
 	LDR(bt->rchild);
 
  } 
  
  void LRD(tree bt)//后序遍历
 {
 	if(bt==NULL)
 		return;
 	LRD(bt->lchild);
 	LRD(bt->rchild);
 		cout<<bt->data;
  } 
  
  int main()
  {
  	pre_crt(root);
  	DLR(root);
  	cout<<endl;
  	LDR(root);
  	cout<<endl;
  	LRD(root);
  	cout<<endl;
  	return 0;
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值