繁体   English   中英

二叉树级订单遍历

[英]Binary Tree Level order traversal

出于好奇,我想知道是否有可能只使用一种递归方法就可以遍历二叉树。

我已经设法使用队列遍历一棵二叉树,但是从我访问过的一些站点了解了如何使用队列来完成它。 有些人确实提到它也可以与递归一起使用。 一些提到递归方法的站点使用两种或多种方法来解决此问题,但是仅使用一种递归方法是否可以做到这一点?

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

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

同样,您可以处理订单和后订单。

根据您的标题,我假设您正在寻找广度优先遍历 有许多方法可以在没有队列的情况下,甚至可以不对所使用的内存量进行任何扩展,但是这样做非常浪费。

我想到的是迭代加深的“深度优先”搜索 ,该搜索涉及按先后顺序遍历树,但忽略除您当前所在的每个深度级别。 取决于树的分支,它可能像O(n ^ 2)一样糟糕,尽管通常它只是一个相对较慢的O(n)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM