【原创】二叉树的建立与遍历(前序遍历、中序遍历、后序遍历)
来源:互联网 发布:阿里云账号注销 编辑:程序博客网 时间:2024/05/10 15:02
二叉树的建立与遍历(binary-tree)
题目描述
给出一棵二叉树,分别输出先序、中序、后序遍历结果。
输入
第一行:结点数n(1<=n<=100)。
以下n行,每行3个整数,分别表示父结点、左孩子、右孩子。若没有孩子,对应的整数为0.
输出
第1行:树根
第2行:先序遍历结果,数字间用1个空格分开。
第3行:中序遍历结果,数字间用1个空格分开。
第4行:后序遍历结果,数字间用1个空格分开。
样例输入
8
1 2 4
2 0 0
4 8 0
3 1 5
5 6 0
6 0 7
8 0 0
7 0 0
样例输出
3
3 1 2 4 8 5 6 7
2 1 8 4 3 6 7 5
2 8 4 1 7 6 5 3
分析:
我们今天学了二叉树,我深有感触。
neixinos();
二叉树是一种很有用(但不好用)的数据结构,在各种题目中都有它的身影。(That's why I hate it)。
二叉树最基本的应用就是遍历,比较常规的遍历方法有:
1.先序:又叫前序,先根,英文为preorder,也叫DLR。具体步骤有:
①访问根结点 ②访问左结点 ③访问右结点
2.中序:又叫中根,英文为inorder,也叫LDR。具体步骤有:
①访问左结点 ②访问根结点 ③访问右结点
3.后序:又叫后根,英文为postorder,也叫LRD。具体步骤有:
①访问左结点 ②访问右结点 ③访问根结点
写得我精神崩溃惹
详见代码:
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<cstdlib>using namespace std;struct Epic{int data;int left,right,up;}tree[123];int root,n,sp;void input(){int a,b,c;scanf("%d",&n);for(int i=1;i<=n;i++) tree[i].data=i;for(int i=1;i<=n;i++){scanf("%d %d %d",&a,&b,&c);tree[a].left=b; tree[a].right=c;tree[b].up=a; tree[c].up=a;}for(int i=1;i<=n;i++)if(!tree[i].up) root=i;printf("%d\n",root);}void DLR(int i){if(i!=0){if(sp) printf(" ");else sp++;printf("%d",tree[i].data);DLR(tree[i].left);DLR(tree[i].right);}}void LDR(int i){if(i!=0){LDR(tree[i].left);if(sp) printf(" ");else sp++;printf("%d",tree[i].data);LDR(tree[i].right);}}void LRD(int i){if(i!=0){LRD(tree[i].left);LRD(tree[i].right);if(sp) printf(" ");else sp++;printf("%d",tree[i].data);}}int main(){input();sp=0;DLR(root);sp=0;printf("\n");LDR(root);sp=0;printf("\n");LRD(root);return 0;}
内心os()
{
好难啊!!!
}
1 1
- 【原创】二叉树的建立与遍历(前序遍历、中序遍历、后序遍历)
- C++数据结构--二叉树的建立,前序遍历,中序遍历和后序遍历
- 二叉树的建立,前序遍历,中序遍历,后序遍历
- 二叉树的建立以及前序遍历、中序遍历、后序遍历
- 二叉树的遍历(前序遍历、中序遍历、后序遍历)
- 20170816_二叉树的建立+前序遍历+中序遍历+后序遍历+层序遍历
- 二叉树的遍历 前序遍历 中序遍历 后序遍历
- 二叉树的遍历:前序遍历、中序遍历和后序遍历
- 二叉树建立,前序遍历,中序遍历,后序遍历 思路
- 二叉树遍历(Java)---前序遍历,中序遍历,后序遍历
- 二叉树遍历(前序遍历,中序遍历,后序遍历)
- 二叉树的遍历,二叉树的创建、前序遍历、中序遍历、后序遍历 (转)
- 二叉树的前序遍历,中序遍历和后序遍历(c#)
- 二叉树的建立与遍历(前序,中序,后序)
- 通过前序(后序), 中序遍历建立二叉树 求解层次遍历
- 扩展二叉树 建立 以及 前序遍历 中序遍历 后序遍历 的非递归算法
- 二叉树利用前序遍历+中序遍历---->后序遍历(把整个树建立起来)
- 编程实现二叉树的建立,前序遍历,中序遍历和后续遍历
- 广度优先搜索——水杯倒水问题
- Android之ListView原理学习与优化总结
- hibernate配置文件hibernate.cfg.xml的详细解释
- Gas Station
- 插入排序之希尔(shell)排序
- 【原创】二叉树的建立与遍历(前序遍历、中序遍历、后序遍历)
- comparator接口与Comparable接口的区别
- 运算符
- hihocoder #1050 树中的最长路
- 建立全局和局部对象时,不同的构造函数和析构函数的调用顺序
- 动归
- mac上mysql数据库读取数据中文乱码问题
- Spring面试题总结
- 单调栈萌新讲解