首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-09-03 
关于二叉树的遍历新手求问最近在写二叉树一直不理解这段代码templateclassTvoidPreOrder(BinaryTreeNode

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


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

热点排行