二叉树的构造与遍历

 1 #include <iostream>
 2 using namespace std;
 3
 4 typedef struct node
 5 {
 6     char data;
 7     struct node *lchild;
 8     struct node *rchild;
 9 }BiTreeNode,*BiTree;
10
11 void createBiTree(BiTree &T)
12 {
13     char c;
14     cin>>c;
15     if(c==‘#‘) T=NULL;
16     else{
17         T=new BiTreeNode;
18         T->data=c;
19         createBiTree(T->lchild);
20         createBiTree(T->rchild);
21     }
22 }
23
24 void preTraverse(BiTree T)
25 {
26     if(T){
27         cout<<T->data<<" ";
28         preTraverse(T->lchild);
29         preTraverse(T->rchild);
30     }
31 }
32
33 void midTraverse(BiTree T)
34 {
35     if(T){
36         midTraverse(T->lchild);
37         cout<<T->data<<" ";
38         midTraverse(T->rchild);
39     }
40 }
41
42 void postTraverse(BiTree T)
43 {
44     if(T){
45         postTraverse(T->lchild);
46         postTraverse(T->rchild);
47         cout<<T->data<<" ";
48     }
49 }
50
51 int main()
52 {
53     BiTree T;
54     createBiTree(T);
55     cout<<"二叉树构造成功!"<<endl;
56     cout<<"先序遍历二叉树:"<<endl;
57     preTraverse(T);
58     cout<<endl;
59     cout<<"中序遍历二叉树:"<<endl;
60     midTraverse(T);
61     cout<<endl;
62     cout<<"后序遍历二叉树:"<<endl;
63     postTraverse(T);
64     return 0;
65 }

原文地址:https://www.cnblogs.com/shixinzei/p/10201177.html

时间: 2024-10-18 20:18:54

二叉树的构造与遍历的相关文章

二叉树的构造和遍历——递归实现

一.二叉树的定义: 二叉树是每个结点最多有两个子树的有序树.二叉树常被用于实现二叉查找树.值得注意的是,二叉树不是树的特殊情形.在图论中,二叉树是一个连通的无环图,并且每一个顶点的度不大于2.有根二叉树还要满足根结点的度不大于2.有了根结点后,每个顶点定义了唯一的根结点,和最多2个子结点.然而,没有足够的信息来区分左结点和右结点. 二.二叉树与树的区别: 二叉树不是树的一种特殊情形,尽管其与树有许多相似之处,但树和二 叉树有两个主要差别: 1. 树中结点的最大度数没有限制,而二叉树结点的最大度数

二叉树的构造与遍历(前序、中序、后序)

注意: 构造二叉树的时候要用双重指针,用单重指针时,要有返回值. 代码如下: /* 此处输入空格代表空,默认按前序遍历完全二叉树的方式输入数据 形参是在执行函数时自动分配的,没有执行这个函数之前不占用存 储空间,当函数执行完毕后释放这个形参,所以我们要使用到双重指 针来构造树.这样,我们传进去的是树节点的指针的指针,这样函数 执行完成后即使这个“指针的指针“被释放掉了,我们通过*T保存的树 结点的数据还是可以通过树节点的指针T来调用.相反,如果我们传 进去如果是树结点的指针,当这个函数执行完毕后

二叉树的构造_遍历_求数高和求节点数

1 //手工构造一颗二叉树 ,并给出递归和非递归2类7种遍历方法,树高,节点数求法和逆时针90度显示二叉树 2 //注意本文中2个 typename的使用层次 3 //递归遍历容易溢栈 4 #include <cstdlib> 5 #include <iostream> 6 #include <queue> //用到队列时需要包含此文件 7 #include <stack> //用到栈时需要包含此文件 8 9 using namespace std; 10

二叉树构造、遍历和释放--自己写数据结构

直接上代码 bitree.h文件如下: #ifndef _BITREE_H_ #define _BITREE_H_ typedef char TElemType; typedef struct _BitNode { TElemType data; struct _BitNode *lchild,*rchild; }BitNode,*pBitNode; int bittree_creat(BitNode **T); void pre_order(BitNode *T); void mid_orde

数据结构例程——二叉树的构造

本文是数据结构基础系列(6):树和二叉树中第13课时二叉树的构造的例程. 1.由先序序列和中序序列构造二叉树 定理:任何n(n≥0)个不同节点的二叉树,都可由它的中序序列和先序序列唯一地确定. 证明(数学归纳法) 基础:当n=0时,二叉树为空,结论正确. 假设:设节点数小于n的任何二叉树,都可以由其先序序列和中序序列唯一地确定. 归纳:已知某棵二叉树具有n(n>0)个不同节点,其先序序列是a0a1-an?1:中序序列是b0b1-bk?1bkbk+1-bn?1. 先序遍历"根-左-右&quo

8606 二叉树的构建及遍历操作

时间限制:1000MS  内存限制:1000K 题型: 编程题   语言: 无限制 描述 构造二叉链表表示的二叉树:按先序次序输入二叉树中结点的值(一个字符),'#'字符表示空树,构造二叉链表表示的二叉树T:再输出三种遍历序列.本题只给出部分代码,请补全内容. #include "stdio.h" #include "malloc.h" #define TRUE 1 #define FALSE 0 #define OK  1 #define ERROR  0 #de

二叉树 二叉树的性质 存储结构 遍历二叉树 C实现二叉树的创建和遍历 线索二叉树

定义 二叉树(binary tree)是n(n>=0)个结点的有限集合,该集合为空集合称为空二叉树,或者有一个根结点和两棵互不相交的,分别称为树根结点的左孩子树和右孩子树组成. 二叉树的特点 每个结点最多有两棵子树,所以二叉树总没有度大于2的结点 左子树和右子树是有顺序的,次数不能任意颠倒 即使树中某结点只有一棵子树,也要区分是左子树还是右子树 特殊的二叉树 1. 斜树 所有的结点都只有左子树的二叉树称为左斜树; 所有的结点都只有右子树的二叉树称为右斜树; 这两者统称为斜树 2. 满二叉树 在一

【算法与数据结构】二叉树的 中序 遍历

前一篇写了二叉树的先序遍历,本篇记录一下二叉树的中序遍历,主要是非递归形式的中序遍历. 由于距离上篇有好几天了,所以这里把二叉树的创建和存储结构也重复的写了一遍. 二叉树如下 二叉树的存储方式依然是二叉链表方式,其结构如下 typedef struct _tagBinTree { unsigned char value; struct _tagBinTree* left; struct _tagBinTree* right; }BinTree, *PBinTree; 先序递归形式的创建二叉树代码

二叉树 根据后序遍历生成二叉树

题目:给定一个二叉树的后序遍历数组arr[],生成二叉树 解题思路:根据搜索二叉树的性质,数组的最后一位arr[end]是二叉树的根,而且数组的左部分比arr[end]小,是根节点的左子数,数字的右部分比arr[end]大,是数组的右子数. Example: 树的形状如上图,后序遍历为:1 3 2 6  8 7 5 arr[end] = 5; 左部分(左子树):{1,3,2} 右部分(右子树):{6,8,7} package cn.edu.algorithm.prototype; /** * 根