树遍历中的递归

时间:2016-12-26 18:35:26

标签: java recursion data-structures tree

我是图形和树木概念的新手。下面是树的遍历树遍历。

var random = new Random();
var sequenceY = Enumerable.Range(1, 20)
                          .Select(x => random.Next(1, 30))
                          .Where(x => x % 2 == 0)
                          .ToArray();

我无法理解流程,因为它涉及递归。有人可以解释一下控制流是如何发生堆栈的。

3 个答案:

答案 0 :(得分:2)

假设我有一棵树,就像这样:

    4
   / \
  2   5
 / \
1   3

您的代码将首先通过左边的孩子进行递送4 - > 2 - > 1.由于1没有左子(它为空),它将打印1然后弹出堆栈。递归的下一个是2.它将打印2然后遍历2的右子3,它将打印3,然后弹出堆栈。然后它将打印4,然后是4的右子5.打印序列将是1,2,3,4,5。Here也是一个很好的动画。

答案 1 :(得分:2)

图像显示了使用简单树执行代码,它可以帮助您了解递归的工作原理,只需按照箭头操作即可。

在每个堆栈下面都有一个树形图,以黄色显示当前节点(单击图像将其展开):

tree recursion

答案 2 :(得分:1)

这是一个inOrder遍历你第一次访问左子,如果存在,如果不是你打印点头,你移动到左节点enter image description here 例如,在这个树中你的代码输出将是  10,4,11,2,5,9,1,7,6,8,3 我们还有preOrderpostOrde遍历

preOrder

preorder(Node N)
if (N != null)
Visit N;
for each child Y of N
preorder(Y);

和发布订单

postorder(Node N)
if (N != null)
for each child Y of N
postorder(Y);
Visit N;