读书人

关于二叉树的遍历生手求问

发布时间: 2012-09-03 09:48:39 作者: rapoo

关于二叉树的遍历新手求问
最近在写二叉树 一直不理解这段代码


template <class T>
void PreOrder(BinaryTreeNode *t){
if(t){
Visit(t) ;//访问节点
PreOrder(t-> left) ;
PreOrder(t-> right) ;
}
}


说明一下哈,给我一个树,我可以说出前序遍历是什么,后序遍历是什么,我只是看不懂这个代码,为什么判断这个t后就可以遍历完?递归?这里并没给出递归初始条件什么的啊?各位大大解释下哈~~
谢谢了~~

[解决办法]
PreOrder(t-> left) 如果t没有左子节点,传入的参数就NULL,
这次调用展开,然后因为if(t)调节不满足,就会跳过大括号里面的递归语句,执行到最后直接返回,
这样就可以只有存在的子节点就一直遍历,知道没有为止。
如果不加判断,哪怕已经没有子节点了,也会继续分裂,展开,逻辑错误。
[解决办法]
递归,遇到叶子节点或只有一个子节点的节点则往上返回。

读书人网 >C++

热点推荐