在二叉搜索树中搜索时使用迭代而不是递归

时间:2016-11-03 13:01:46

标签: java

我正在阅读有关在二叉搜索树中搜索项目的内容。我找到了这段代码:

public class Node {
         public int key;
         public Object data;
         public Node left;
         public Node right;
        }

public static Object search(Node root, int key) {
     if (root == null)
     return null;
     else if (key == root.key)
     return root.data;
     else if (key < root.key)
     return searchTree(root.left, key);
     else
     return searchTree(root.right, key);
     } 

我想重写search()方法,以便它使用迭代而不是 递归。我确实喜欢这个:

public static Object search(Node root, int key) {
         if (root == null)
         return null;
         else if (key == root.key)
         return root.data;
         else if (key < root.key) {
             Iterator iter = root.left.iterator();
         while (iter.hasNext()) {
             object item = iter.next();
             if(iter.key.equals(key)) {
                 return item.data;
             }
         }
         } else {
             Iterator iter = root.right.iterator();
             while (iter.hasNext()) {
                 object item = iter.next();
                 if(iter.key.equals(key)) {
                     return item.data;
                 }
             }
         }
    }

我做对了吗?

由于

1 个答案:

答案 0 :(得分:0)

坦率地说 - 我几乎失去了你的迭代器方法,因为非递归方法你可以使用堆栈。

  1. 将root推入堆栈。
  2. 从堆栈弹出元素并检查您搜索节点的条件(堆栈中没有元素,搜索失败)。
  3. 标准匹配,休息。
  4. 标准与将左右孩子推入堆栈不匹配。
  5. 返回第2步。