采取树下面作为一个例子,其中Node0
是传递给DisplayTree
第一PersonRec*
(右侧是该节点访问以供参考的顺序):
Node0 1st
/ \ / \
Node2 Node1 5th 2nd
/ | | \ /| | \
NULL NULL NULL NULL 7th 6th 4th 3rd
- 第一个电话输入if语句并通过
Node1
至DisplayTree
(如rChild
)
- 第二呼叫进入if语句,并传递
NULL
到DisplayTree
(如rChild
)
- 因为参数是
NULL
并返回到第二呼叫(Node1
)
- 第二呼叫的第三呼叫不进入if语句现在打印
Node1
,然后传递到NULL
DisplayTree
(如lChild
)
- 第四打不进if语句,并返回到第二个呼叫(
Node1
)
- 第二呼叫已经完成,并返回到第一个呼叫(
Node0
)
- 第一呼叫现在打印
Node0
然后传递Node2
到DisplayTree
(如lChild
)
- 第五呼叫进入if语句,并传递
NULL
到DisplayTree
(如rChild
)
- 第六打不进if语句,并返回到第五轮(
Node2
)
- 第五呼叫现在打印
Node2
然后通过NULL
到DisplayTree
(如lChild
)
- 第七打不进if语句,并返回到第五轮(
Node2
)
- 第五调用完成并返回到第一个呼叫
- 的第一个电话已完成
编辑:用较小的示例解决您的评论。考虑一棵树只有一个没有孩子的节点,这次我们可以更多地关注代码。树是这样的:
Node0
/ \
NULL NULL
第一次你的代码被调用时,Node0
在传递if (ptr != NULL)
是true
,因此进入执行if语句。下一行DisplayTree(ptr->rChild);
使用NULL
调用该函数。在该呼叫期间,if (ptr != NULL)
是false
因此执行不会输入if语句。结果,执行返回到先前的调用,并且下一行代码是cout << "Name: " << ptr->name...
,它打印Node0
的信息,这就是为什么有输出。该行完毕后,呼叫,DisplayTree(ptr->lChild);
也因为它通过NULL
,然后所有的递归结束
它首先遍历'rChild'(这可能意味着正确) – asimes
是的,这是正确的。右孩子第一 –