繁体   English   中英

二叉树双阶遍历

[英]Binary Tree Double Order Traversal

任何人都可以向我解释双顺序遍历吗?

        A
      /   \
     B     E
   /  \   /  \
  C   D  F    G

双顺序遍历输出:ABCCBDDAEFFEGG

我对解释而不是代码感兴趣。

谢谢

假设您对双顺序遍历的解释感兴趣:

对于每次遍历,你

  • 访问节点
  • 穿越左边的孩子
  • 访问节点
  • 横穿右儿童

这里的所有都是它的。 如果您没有左子(例如C),则两个“访问节点”操作会重复发生,这就是您在输出中看到两个C的原因。

只是为了可视化(输出为粗体):

  • 访问A: A
  • 横过左边的孩子B.
    • 访问B: AB
    • 遍历左边的孩子C.
      • 访问C: ABC
      • 没有留下的孩子
      • 访问C: ABCC
      • 没有合适的孩子
    • 穿越右边的孩子D.
      • 访问D: ABCCD
      • 没有留下的孩子
      • 访问D: ABCCDD
      • 没有合适的孩子
  • 访问A: ABCCDDA
  • 穿越右边的孩子E.
    • 访问E: ABCCDDAE

等等

主要是遍历树的递归方法(这里我们处理的是二叉树)

这是一个双阶遍历的算法:

算法DoubleOrder(root)

  1. if(root不为NULL)

    1. 打印(根)
    2. DoubleOrder (leftSubtree)//递归调用
    3. 打印(根)
    4. DoubleOrder (rightSubtree)//递归调用
  2. 万一

  3. 结束DoubleOrder

说明:

  1. 访问A并打印输出:A
  2. A已离开子树
    1. 访问B并打印输出:AB
    2. B已经离开了子树
      1. 访问C并打印输出:ABC
      2. C没有左子树
      3. 再次访问C并打印输出:ABCC
      4. C没有子树
      5. 返回B(在C的情况下,所有4个语句都已执行)
    3. 再次访问B并打印输出:ABCCB
    4. B有正确的子树
      1. 访问D并打印输出:ABCCBD
      2. D没有左子树
      3. 再次访问D并打印输出:ABCCBDD
      4. D没有子树
      5. 返回B(在D的情况下,所有4个语句都已执行)
    5. 返回A(B的情况下执行了所有4个语句)
  3. 再次访问A并打印输出:ABCCBDDA
  4. A有正确的子树
    1. 访问E并打印输出:ABCCBDDAE
    2. E已经离开了子树
      1. 访问F并打印输出:ABCCBDDAEF
      2. F没有左子树
      3. 再次访问F并打印输出:ABCCBDDAEFF
      4. F没有子树
      5. 返回E(F中所有4个语句都已执行)
    3. 再次访问E并打印输出:ABCCBDDAEFFE
    4. E有正确的子树
      1. 访问G并打印输出:ABCCBDDAEFFEG
      2. G没有左子树
      3. 再次访问G并打印输出:ABCCBDDAEFFEGG
      4. G没有子树
      5. 返回E(G的所有4个语句都已执行)
    5. 返回A(E的所有4个语句都已执行)
  5. 当我们返回到树的主根时停止执行(因为在A的情况下所有4个语句都已执行)

最终输出:ABCCBDDAEFFEGG

我希望它可以帮助你理解整体概念! 我很高兴第一次回答堆栈溢出:)

想象一下,你正在走路,从根开始。

  1. 你在A;
  2. 走到左边的孩子,你到了B;
  3. 走到左边的孩子,C;
  4. 死路一条,你回头,还是C;
  5. 回到B;
  6. 走到右边的孩子,到D;
  7. 死路一条,转身还是D;

等等

这只是一种遍历内外的遍历。

在一个前序遍历的左右儿童访问之间,你访问根(因为你必须回到它进一步走),你可以认为叶子没有孩子的根,而null会让你回去在任何时候(因此连续两次访问叶子,节点只有正确的孩子)。

递归:

1. Visit root of (sub)tree.
2. Visit left subtree.
3. Revisit root of (sub)tree.
4. Visit right subtree.

我无法想到它的应用程序,虽然我已经做了一些真正奇特的事情,一堆树上的节点(和链表)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM