二进制树级别订单遍历

时间:2013-12-11 05:29:40

标签: java binary-tree traversal

出于好奇,我想知道是否可以使用一个递归方法来遍历二叉树。

我已经设法使用队列遍历二叉树,但是从我访问过的一些网站中了解如何使用队列来完成它;有些人确实提到它也适用于递归。一些提到递归方法的网站使用两种或多种方法来解决这个问题,但是只用一种递归方法就可以做到吗?

2 个答案:

答案 0 :(得分:0)

是的,可以使用一种递归方法遍历二叉树

void preorder (Node * root) {
   if(root!=null) {
       System.out.println(root->data);
       preorder(root->lchild);
       preorder(root->rchild);
   }
}

同样,你可以为顺序和后序做。

答案 1 :(得分:0)

我根据您的标题假设您正在寻找广度优先遍历。有一些方法可以在没有队列的情况下执行此操作,或者实际使用任何内存量进行缩放,但它们非常浪费。

想到的是iterative-deepening depth-first search,它涉及以/后顺序遍历树,但忽略每个级别的深度,但是你当前所在的深度。根据树的分支,这可能与O(n ^ 2)一样糟糕,但通常它只是一个相对较慢的O(n)。

如本文所述,迭代加深深度优先搜索也可用于非树图,这可能很方便,但可能与您的情况无关。