大话数据结构——二叉树的建立与遍历~2020.6.30

本文探讨二叉树的遍历方法,包括前序、中序、后序和层序遍历。通过递归思想,深入理解二叉树的数据结构,并提供前序建立二叉树及遍历的代码示例,强调在实现过程中参数传递的重要性。
摘要由CSDN通过智能技术生成

二叉树的遍历是指从根节点出发,按照某种次序依次访问二叉树中的所有节点,使得每个节点被访问且仅被访问一次。
二叉树的遍历方法
前序遍历
在这里插入图片描述
中序遍历


后序遍历
在这里插入图片描述
层序遍历
在这里插入图片描述
原理:递归
对于递归而言,由于上一个学期研究了dfs和bfs,故而对递归的思想有所深入了解,对于二叉树的理解便没有那么困难了。总体而言,二叉树并非一种特别困难的数据结构,下面放出前序建立二叉树的代码以及二叉树的前序中序后序遍历代码。

#include <iostream>
#include <cstdio>
using namespace std;
typedef char ElemType;
struct node{
 node *left,*right;
 ElemType data;
}*root;
void SetBT(node* &t){/*注:此处一定要传入指针的地址,否则仅仅是在函数范围内建立了
临时变量,于二叉树建立完成后即被销毁,这样的话永远也得不到遍历的结果*/ 
 char c;
 cin>>c;
 if(c=='#') t=NULL;
 else{
  t=new node;
  t->data=c;
  SetBT(t->left);
  SetBT(t->right);
 }
}
void PreOrderTraverse(node *t){
 if(t==NULL) return;
 
 cout<<t->data;
 PreOrderTraverse(t->left);
 PreOrderTraverse(t->right);
} 
void InOrderTraverse(node *t){
 if(t==NULL) return;
 
 InOrderTraverse(t->left);
 cout<<t->data;
 InOrderTraverse(t->right);
}
void PostOrderTraverse(node *t){
 if(t==NULL) return;
 
 PostOrderTraverse(t->left);
 PostOrderTraverse(t->right);
 cout<<t->data;
}
int main()
{
 cout<<"建立一科二叉树(前序建立),请输入存于树中的信息:";
 SetBT(root);
 cout<<"前序遍历"<<endl;
 PreOrderTraverse(root);
 cout<<endl;
 cout<<"中序遍历"<<endl;
 InOrderTraverse(root);
 cout<<endl;
 cout<<"后序遍历"<<endl;
 PostOrderTraverse(root);
 cout<<endl;
 return 0;
}//AB#D##C##

注:

void SetBT(node* &t){/*注:此处一定要传入指针的地址,否则仅仅是在函数范围内建立了
临时变量,于二叉树建立完成后即被销毁,这样的话永远也得不到遍历的结果*/ 
 char c;
 cin>>c;
 if(c=='#') t=NULL;
 else{
  t=new node;
  t->data=c;
  SetBT(t->left);
  SetBT(t->right);
 }
}

此处需特别注意,这是前序建立二叉树的代码,若你与笔者的思路相同,那么创建二叉树函数的形参一定要是指针的地址,否则仅仅只是在函数中创建了一个临时变量,创建完成后就被销毁了,这显然是没有任何意义的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值