标签:out pac 平衡二叉树 nbsp 调用 指针 nod 意义 遇到
二叉树是十分重要的数据结构,主要用来存放数据,并且方便查找等操作,在很多地方有广泛的应用。
今天主要写的最基本的二叉树,后续会继续写线索二叉树,二叉排序树,平衡二叉树等。
二叉树的建立思路仍然是采用的递归的思想,给定一个指向根节点的指针,然后递归调用ceate()函数,自动生成一个二叉树。就像是在地上挖了个坑(根节点),然后他会拿着斧子(create函数)自己挖一颗很大的洞穴(二叉树)出来。当然挖坑前需要先定义每个洞长什么样(定义节点结构)。
1 #include<iostream>
2 using namespace std;
3
4 typedef struct node
5 {
6 struct node *lchild;
7 struct node *rchild;
8 char data;
9 }BiTreeNode, *BiTree; //这里的*BiTree意思是给 struct node*起了个别名,叫BiTree,所以BiTree为指向节点的指针,
并且可以作为指向二叉树根节点的指针(用以指示二叉树)。
11
12 void createBiTree(BiTree &T) //这里加上&意思是传递的参数为指针的引用,括号里面等价于 BiTreeNode* &T
13 { //这样的意义在于在函数执行过后,传递进来的指针会发生改变(引用的作用),不可以去掉&
14 char c;
15 cin >> c;
16 if(‘#‘ == c) //当遇到#时,令树的根节点为NULL,从而结束该分支的递归
17 T = NULL;
18 else
19 {
20 T = new BiTreeNode;
21 T->data=c;
22 createBiTree(T->lchild);
23 createBiTree(T->rchild);
24 }
25 }
26
27 //前序遍历二叉树并打印出来
28 void preorder(BiTree T)
29 {
30 if(T)
31 {
32 cout<<T->data<<" ";
33 preorder(T->lchild);
34 preorder(T->rchild);
35 }
36 }
37 //中序遍历二叉树并打印出来
38 void midorder(BiTree T)
39 {
40 if(T)
41 {
42 midorder(T->lchild);
43 cout<<T->data<<" ";
44 midorder(T->rchild);
45 }
46 }
47 //后续遍历二叉树并打印出来
48 void postorder(BiTree T)
49 {
50 if(T)
51 {
52 postorder(T->lchild);
53 postorder(T->rchild);
54 cout<<T->data<<" ";
55 }
56 }
57 int main()
58 {
59 BiTree T; //声明一个指向二叉树根节点的指针
60 createBiTree(T);
61 cout<<"二叉树创建完成!"<<endl;
62 cout<<"前序遍历二叉树:"<<endl;
63 preorder(T);
64 cout<<endl;
65 cout<<"中序遍历二叉树:"<<endl;
66 midorder(T);
67 cout<<endl;
68 cout<<"后序遍历二叉树:"<<endl;
69 postorder(T);
70 return 0;
71 }标签:out pac 平衡二叉树 nbsp 调用 指针 nod 意义 遇到
原文地址:http://www.cnblogs.com/xufeng123/p/7822627.html