二叉搜索树中查找数字

二叉搜索树中查找数字

问题

这个题目说的是,给你一棵二叉搜索树和一个数字,你要在二叉搜索树上找到这个数字,并返回它所在的节点。如果找不到这个数字,就返回空指针。

二叉搜索树的定义是:

  1. 左子树所有节点上的值都小于根节点上的值
  2. 右子树所有节点上的值都大于根节点上的值
  3. 左右子树同时也为二叉搜索树

比如说,给你的二叉搜索树是:

     8
    / \
   2  16
  / \
 1   4

给你的数字是 1。1 在这棵二叉搜索树里,因此你要返回节点 1。

如果给你的数字是 42,不在这棵树中,则返回空指针。

代码

public class AlgoCasts {

  public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
      val = x;
    }
  }

  // Time: O(h), Space: O(h)
  public TreeNode searchBSTRecursive(TreeNode root, int val) {
    if (root == null || val == root.val) return root;
    else if (val < root.val) return searchBSTRecursive(root.left, val);
    else return searchBSTRecursive(root.right, val);
  }

  // Time: O(h), Space: O(1)
  public TreeNode searchBSTIterative(TreeNode root, int val) {
    while (root != null && val != root.val) {
      if (val < root.val) root = root.left;
      else root = root.right;
    }
    return root;
  }

}

 上一篇
用中序和后序遍历序列构建二叉树 用中序和后序遍历序列构建二叉树
用中序和后序遍历序列构建二叉树问题 这个题目说的是,给你一棵二叉树的中序和后序遍历序列,你要根据这两个序列构建这棵二叉树。假设这棵二叉树节点上没有重复的数字。 比如说,给你的中序遍历序列和后序遍历序列分别是: 中序遍历序列:2, 1, 8
2018-12-28
下一篇 
Java几种常用JSON库性能比较 Java几种常用JSON库性能比较
Java几种常用JSON库性能比较上一篇介绍了Java性能测试框架JMH的使用方法,本篇通过JMH来测试一下Java中几种常见的JSON解析库的性能。 每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库。但是百闻不如一见,只有
2018-12-28
  目录