二叉树(1)- 创建二叉树

有任何问题,欢迎交流!微博@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://upload-images.jianshu.io/upload_images/3333768-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://upload-images.jianshu.io/upload_images/3333768-eb911ed09c2c4742.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

你可能感兴趣的:(二叉树(1)- 创建二叉树)