【慢一点走】二叉树的创建和遍历

时间:2019-01-23
本文章向大家介绍【慢一点走】二叉树的创建和遍历,主要包括【慢一点走】二叉树的创建和遍历使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

利用递归完成了二叉树的创建和遍历,两个需要注意的点:1.递归中的变量如果涉及到累加或累减类似操作的时候,需要考虑清楚嵌套时的数值是否为期望的数值。2.创建二叉树时,由于要改变的是指针本身而不是指针指向的数据,所以需要二级指针,实际上传递的是指针本身的地址。

typedef struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
} BiNode, *BiTree;

/*Solution define*/
class Solution {
private:

public:
    void CreatTree(TreeNode** newtree);/*顺序创建二叉树*/
    void PreOrderBiTree(BiNode *T);/*前序遍历二叉树*/
    void MiddleOrderBiTree(BiNode *T);/*中序遍历二叉树*/
    void PostOrderBiTree(BiNode *T);/*后序遍历二叉树*/
};


void Solution::CreatTree(TreeNode** newtree)
{
    int temp;

    cout<<"enter num please"<<endl;
    cin>>temp;
    if(-1 == temp)
    {
        *newtree = NULL;
    }
    else
    {
        *newtree = new (TreeNode);
        if(*newtree == NULL)
        {
            cout<<"create failed"<<endl;
        }
        (*newtree)->val = temp;
        CreatTree(&((*newtree)->left));
        CreatTree(&((*newtree)->right));
    }
}

void Solution::PreOrderBiTree(BiNode *T)
{
    if(T == NULL)
    {
        //cout<<-1<<"->";
    }
    else
    {
        cout<<T->val<<"->";
        PreOrderBiTree(T->left);
        PreOrderBiTree(T->right);
    }
}

void Solution::MiddleOrderBiTree(BiNode *T)
{
    if(T == NULL)
    {
        //cout<<-1<<"->";
    }
    else
    {
        MiddleOrderBiTree(T->left);
        cout<<T->val<<"->";
        MiddleOrderBiTree(T->right);
    }
}

void Solution::PostOrderBiTree(BiNode *T)
{
    if(T == NULL)
    {
        //cout<<-1<<"->";
    }
    else
    {
        PostOrderBiTree(T->left);
        PostOrderBiTree(T->right);
        cout<<T->val<<"->";
    }
}

int main(int argc, const char * argv[]) {
    Solution Functionlist;
    BiTree FatherNode = new (TreeNode);

    ios::sync_with_stdio(false);
    cout<<"创建二叉树"<<endl;
    Functionlist.CreatTree(&FatherNode);
    cout<<"前序遍历结果"<<endl;
    Functionlist.PreOrderBiTree(FatherNode);
    cout<<"end"<<endl;
    cout<<"中序遍历结果"<<endl;
    Functionlist.MiddleOrderBiTree(FatherNode);
    cout<<"end"<<endl;
    cout<<"后序遍历结果"<<endl;
    Functionlist.PostOrderBiTree(FatherNode);
    cout<<"end"<<endl;
    return 0;
}