二叉树(1)- 创建二叉树
2016-10-27 本文已影响645人
比特蛙
有任何问题,欢迎交流!微博@HelloWorld-_-
定义二叉树节点的结构体
typedef struct TreeNode
{
char value; //节点值
TreeNode* lchild; //左子树
TreeNode* rchild; //右子树
}TreeNode;
```
#创建二叉树
***
```
/*
采用递归方式创建二叉树,通过*表示没有左子树或右子树
先创建左子树,再创建右子树
*/
int generate(TreeNode* &t)
{
char value;
cin >> value;
if(value != '*')
{
if(t)
{
t->value = value;
}
else
{
t = new TreeNode;
t->value = value;
generate(t->lchild);//创建左子树
generate(t->rchild);//创建右子树
}
}
else // value==* 表示NULL
{
t = NULL;
}
return 0;
}
```
#二叉树示例
***
**输入** ``` ABDH***E*I**CF*J**GK**L** ```
**生成的二叉树如下图**
![二叉树示例.png](http:https://img.haomeiwen.com/i3333768/48f4c1ef2bc6ceef.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
```
//访问二叉树节点,将value打印
int visit(TreeNode* pt)
{
if(pt)
{
if(pt->value != '*')
{
cout << pt->value;
}
}
return 0;
}
//二叉树先序遍历算法,在本文中仅用于展示二叉树结果,不解释其原理
int preOrder(TreeNode* t)
{
if(t)
{
visit(t);
preOrder(t->lchild);
preOrder(t->rchild);
}
return 0;
}
int main()
{
TreeNode* pt = NULL;
generate(pt);//生成二叉树
preOrder(pt);//先序遍历二叉树,用于展示二叉树的效果
return 0;
}
```
**运行结果**
![运行结果.png](http:https://img.haomeiwen.com/i3333768/eb911ed09c2c4742.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)