数据结构之二叉树(一)

设计和编写程序,按照输入的遍历要求(即先序、中序和后序)完成对二叉树的遍历,并输出相应遍历条件下的树结点序列。

 1 //递归实现
 2 #include<iostream>
 3 #include<string>
 4 using namespace std;
 5
 6 typedef struct BiTNode{
 7     char data;
 8     struct BiTNode *lchild,*rchild;
 9 }BiTNode,*BiTree;
10
11 void InitBiTree(BiTree &T)//构造空二叉树
12 {
13     T=NULL;
14 }
15 void CreateBiTree(BiTree &T)//生成二叉树
16 {
17     char ch;
18     cin>>ch;
19     if(ch==‘0‘)//0代表空
20         T=NULL;
21     else
22     {
23         T=(BiTree)malloc(sizeof(BiTNode));//生成根结点
24         if(!T)
25         {
26             cout<<"生成结点错误!"<<endl;
27             return;
28         }
29         T->data=ch;
30         CreateBiTree(T->lchild);
31         CreateBiTree(T->rchild);
32     }
33 }
34
35 void PreOrder(BiTree T)//先序递归遍历
36 {
37     if(T!=NULL)
38     {
39         cout<<T->data<<" ";
40         PreOrder(T->lchild);
41         PreOrder(T->rchild);
42     }
43 }
44
45 void InOrder(BiTree T)//中序递归遍历
46 {
47     if(T!=NULL)
48     {
49         InOrder(T->lchild);
50         cout<<T->data<<" ";
51         InOrder(T->rchild);
52     }
53 }
54
55 void PostOrder(BiTree T)//后序递归遍历
56 {
57     if(T!=NULL)
58     {
59         PostOrder(T->lchild);
60         PostOrder(T->rchild);
61         cout<<T->data<<" ";
62     }
63 }
64 int main()
65 {
66     BiTree T;
67     InitBiTree(T);
68     cout<<"请输入二叉树结点"<<endl;
69     CreateBiTree(T);
70     string str="";
71     cout<<"请输入遍历要求(先序,中序,后序)";
72     cin>>str;
73     if(str=="先序")
74     {
75         cout<<endl<<"先序递归遍历树"<<endl;
76         PreOrder(T);
77     }
78     else if(str=="中序")
79     {
80         cout<<endl<<"中序递归遍历树"<<endl;
81         InOrder(T);
82     }
83     else if(str=="后序")
84     {
85         cout<<endl<<"后序递归遍历树"<<endl;
86         PostOrder(T);
87     }
88     cout<<endl;
89     system("pause");
90     return 0;
91 }
时间: 2024-08-24 09:37:19

数据结构之二叉树(一)的相关文章

数据结构:二叉树的链式存储

数据结构:二叉树的链式存储(C语言版) 1.写在前面 二叉树同样有两种存储方式,数组和链式存储,对于数组来说,我们利用二叉树的性质然后利用下标可以方便的找到一个节点的子节点和父节点. 二叉树的性质: 1.二叉树的第i层上至多有2i-1个节点 2.深度为K的二叉树至多有2k-1个节点 3.任何一个二叉树中度数为2的节点的个数必度数为0的节点数目少1. 说明:度数为0,为叶子节点. 4.具有n个节点的完全二叉树的深度为|_Log2N_|+1 5.若完全二叉树中的某节点编号为i,则若有左孩子编号为2i

数据结构之二叉树查找

数据结构之--二叉树查找 定义:它是一棵树,或者具有以下性质的树.  若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值: 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值:  它的左.右子树也分别为二叉排序树: 图解: ?        ?    ?    ?    ?    ?? #include<stdio.h> #include<stdlib.h> typedef int Status; #define TRUE 1 #define FALSE 0 t

数据结构之二叉树遍历

二叉树的 二叉树节点的描述 public class BiTNode { char data; BiTNode lc,rc; } 下面我们分别用递归和非递归实现前.中.后序遍历,以及使用了两种方法来进行层次遍历二叉树,一种方法就是使用STL中的queue,另外一种方法就是定义了一个数组队列,分别使用了front和rear两个数组的下标来表示入队与出队. 1.前序遍历 未完待续... 数据结构之二叉树遍历,布布扣,bubuko.com

【算法与数据结构】二叉树 中序线索

中序线索二叉树 /************************************************************************ 线索二叉树 二叉树的节点有五部分构造 ----------------------------------------- | lChild | lTag | value | rTag | rChild | ----------------------------------------- lChild = (lTag == 0 ? 左

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

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

数据结构之二叉树的遍历汇总

声明:小弟写博客不久,主要是边上班边学习边写博客,如果错误,望各位包涵并指导. 二叉树是一种常用的非线性数据结构,二叉树是由一个根节点和称为根的左.右子树的两颗互不相交的二叉树构成.二叉树具有一些特殊的性质,如第i层上最多有2^(i-1)个结点.二叉树的链式存储结构如下: typedef struct BTNode { char data; //字符型数据; struct BTNode* lChild,*rChild; //左右子结点的指针; }BTNode,*BiTree; data为二叉树中

采用栈数据结构的二叉树遍历

[前言]树的遍历,根据访问自身和其子节点之间的顺序关系,分为前序,后序遍历.对于二叉树,每个节点至多有两个子节点(特别的称为左,右子节点),又有中序遍历.由于树自身具有的递归性,这些遍历函数使用递归函数很容易实现,代码也非常简洁.借助于数据结构中的栈,可以把树遍历的递归函数改写为非递归函数. 在这里我思考的问题是,很显然,循环可以改写为递归函数.递归函数是否借助栈这种数据结构改写为循环呢.因为函数调用中,call procedure stack 中存储了流程的 context,调用和返回相当于根

python环境下使用mysql数据及数据结构和二叉树算法(图)

python环境下使用mysql数据及数据结构和二叉树算法(图):1 python环境下使用mysql2使用的是 pymysql库3 开始-->创建connection-->获取cursor-->操作-->关闭cursor->关闭connection->结束45 代码框架6 import pymysql.cursors7 ###连接数据库8 connection = pymysql.connect(host='127.0.0.1',port=3306,user='roo

数据结构-二叉树笔记

看完<数据结构与算法分析>(c描述)后对二叉树的一点总结 树的节点声明: 1 typedef int ElementType; 2 typedef struct TreeNode* Position; 3 typedef Position BiSearchTree; 4 5 struct TreeNode 6 { 7 ElementType Element; 8 Position Left,Right; 9 10 }; 二叉查找树的定义如下: 1.二叉查找树首先是一棵二叉树: 2.二叉查找树除

基本数据结构之二叉树

C语言实现二叉树的遍历 二叉树结点的定义 /* 先序,中序,后序的遍历时间复杂度为O(n),每个结点只访问一次. 层序的时间复杂度最差为O(n^2),当二叉树基本平衡时,时间复杂度为O(n) n为结点个数 */ typedef int tree_node_element; /** * @author 韦轩 * @time 2015/07/11 * @brief 二叉树的结点数据结构 * */ typedef struct binary_tree_node { binary_tree_node*