【问题标题】:Binary Tree Level order traversal二叉树级顺序遍历
【发布时间】:2013-12-11 05:29:40
【问题描述】:

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

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

【问题讨论】:

  • 不是两个/所有方法都是递归的,我很想知道是否有可能将你需要的所有东西都放入一个递归方法中并且仍然可以工作。

标签: java binary-tree traversal


【解决方案1】:

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

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

同样,你可以为 inorder 和 postorder 做。

【讨论】:

  • 用户请求Level order traversel
  • 哦对了!那么如果没有队列,广度优先搜索级别的顺序遍历是不可能的。因为递归在内部维护了一个栈,而广度优先搜索不能使用栈来实现。
  • 你不能说这是不可能的......虽然找到解决方法可能很困难......
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2020-10-28
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多