怎样用非递归的方法建立一颗二叉树

搬砖随想录 2013-08-20 05:57:07
RT
...全文
328 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
大尾巴猫 2013-08-20
  • 打赏
  • 举报
回复
引用 5 楼 gaohuaid 的回复:
[quote=引用 3 楼 ananluowei 的回复:] 用栈模拟,简单说一下思路
先把根节点丢进栈
while (栈不空)
{
    从栈取1个节点
    输入数字
    if (输入正确)
    {
        new 左右2个节点,左右指针指向2个节点,然后先右后左进栈
    }
    else
    {
        判断其父节点是否存在,以及是父节点的左还是右
        把父节点相应指针设置NULL
        delete 当前节点
    }
}
这样的话是不是得用三叉链表,我想建立的是以二叉链表存储的二叉树,怎么破?[/quote] 二叉链表链表就麻烦一点了,不能用先new,发现空节点再delete的策略,二叉找父节点麻烦。 要在输入和栈中存储方式做改变。 比如,输入1个数字,然后跟1个标志代表他的下属节点情况,0表示无子树,1表示左,2表示右,3表示左右都有。 判别子树情况下,入栈的时候把这个节点入栈,把表示子树的标志入栈。 假如有2个子树,当前节点时node, 那么把node入栈,2入栈,node入栈,1入栈 从栈中取节点,一次取2个数据,node节点以及标志 判别,输入数据,new节点,连接上当前节点的相应指针,继续对这次new的节点情况判断入栈。
搬砖随想录 2013-08-20
  • 打赏
  • 举报
回复
引用 3 楼 ananluowei 的回复:
用栈模拟,简单说一下思路
先把根节点丢进栈
while (栈不空)
{
    从栈取1个节点
    输入数字
    if (输入正确)
    {
        new 左右2个节点,左右指针指向2个节点,然后先右后左进栈
    }
    else
    {
        判断其父节点是否存在,以及是父节点的左还是右
        把父节点相应指针设置NULL
        delete 当前节点
    }
}
这样的话是不是得用三叉链表,我想建立的是以二叉链表存储的二叉树,怎么破?
搬砖随想录 2013-08-20
  • 打赏
  • 举报
回复
引用 1 楼 max_min_ 的回复:
二叉树的非递归建立 这些东西google下,很多的!
还有,这个程序有问题。 大哥,你给点建设性的建议行不?
大尾巴猫 2013-08-20
  • 打赏
  • 举报
回复
用栈模拟,简单说一下思路
先把根节点丢进栈
while (栈不空)
{
    从栈取1个节点
    输入数字
    if (输入正确)
    {
        new 左右2个节点,左右指针指向2个节点,然后先右后左进栈
    }
    else
    {
        判断其父节点是否存在,以及是父节点的左还是右
        把父节点相应指针设置NULL
        delete 当前节点
    }
}
搬砖随想录 2013-08-20
  • 打赏
  • 举报
回复
引用 1 楼 max_min_ 的回复:
二叉树的非递归建立 这些东西google下,很多的!
这个我倒是搜到了,但看不懂,有木有。。。。
max_min_ 2013-08-20
  • 打赏
  • 举报
回复
二叉树的非递归建立 这些东西google下,很多的!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧