开发者社区 问答 正文

请问怎么用非递归算法建立一棵二叉树?

请问怎么用非递归算法建立一棵二叉树?

展开
收起
知与谁同 2018-07-15 13:06:51 1919 分享 版权
1 条回答
写回答
取消 提交回答
  • 12535
    1.要知道结点的数据及关系等才行。
    2.用new 产生结点;
    很简单。

    -------------------------

    我是用C++模板写的,希望可以帮助你。
    构造方法是:输入一串字符;
    如果直接输入#,则是空树;否则则是AB###;即以前序顺序输入;
    代码:
    void Tree<T>::creat_tree(TreeNode<T> * &pointer)
    {
    //递归实现对森林的赋值;**********************
    /*T temp;
    cin>>temp;
    if(temp=='#')
    {
    pointer=NULL;
    return;
    }
    pointer=new TreeNode<T>;
    pointer->get_val()=temp;
    creat_tree(pointer->get_LeftMostcld());
    creat_tree(pointer->get_Rightslib());*/
    //非递归实现对森林的赋值;*******************************
    T temp;
    stack<TreeNode<T> *> creat_help;
    cin>>temp;
    if(temp=='#')
    {
    pointer=NULL;
    return;
    }
    pointer=new TreeNode<T>;
    pointer->get_val()=temp;
    creat_help.push(pointer);
    TreeNode<T> * temp_pointer=pointer;
    int tag=0; //标志位,值为0,表示处理结点的左孩子,值为1,表示处理结点的右孩子;
    while(cin>>temp)
    {
    if(temp!='#')
    {
    if(tag==0)
    {
    temp_pointer->get_LeftMostcld()=new TreeNode<T>;
    temp_pointer->get_LeftMostcld()->get_val()=temp;
    creat_help.push(temp_pointer->get_LeftMostcld());
    temp_pointer=temp_pointer->get_LeftMostcld();
    }
    else
    {
    temp_pointer->get_Rightslib()=new TreeNode<T>;
    temp_pointer->get_Rightslib()->get_val()=temp;
    creat_help.push(temp_pointer->get_Rightslib());
    temp_pointer=temp_pointer->get_Rightslib();
    tag=0;
    }
    }
    else
    {
    if(tag==0)
    {
    temp_pointer->get_LeftMostcld()=NULL;
    tag=1;
    }
    else
    {
    temp_pointer->get_Rightslib()=NULL;

    }
    if(creat_help.empty())
    return;
    temp_pointer=creat_help.top();
    creat_help.pop();
    }
    }
    }

    2019-07-17 22:55:02
    赞同 展开评论
问答分类:
问答标签:
问答地址: