二叉树 二叉搜索树中的搜索700.

需求:

给定二叉搜索树(BST)的根节点 root 和一个整数值 val。

你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。

示例 1:

二叉搜索树

leetcode题目链接

概念:

什么是二叉搜索树?
任意根节点比左子树的值要大,比右子树的值要小。并且子节点也遵循这个规则。

思路

递归法:
根据二叉搜索树的概念来看,递归是不需要考虑左右后序遍历的,根绝当前值得大小来决定递归调用
层序遍历
层序遍历根据当前值的大小决定是否将子节点放入下次循环,减少了放入的元素两循环也就减少了。

/**
 * 700. 二叉搜索树中的搜索
 */
public class SearchBST700 {
    /**
     * 地递归遍历
     * 由于二叉搜索树是有顺序的,
     * 所以不需要考虑前中后序
     */
    public TreeNode searchBST(TreeNode root, int val) {
        if (root == null || root.val == val) return root;

        if (root.val > val) {
            // >小于情况,一定是往右走,只会出现一条路
            // 不会出现左右分支都有结果的情况
            return searchBST(root.left, val);
        } else {
            return searchBST(root.right, val);
        }

    }

    /**
     * 层序遍历(广度遍历)栈实现
     */
    public TreeNode searchBSTGd(TreeNode root, int val) {
        if (root == null || root.val == val) return root;
        Stack<TreeNode> stack = new Stack<>();
        stack.push(root);

        while (!stack.isEmpty()) {
            TreeNode node = stack.pop();
            if (node.val == val) return node;

            if (node.val > val) {
                if (node.left != null) {
                    stack.push(node.left);
                }
            } else {
                if (node.right != null) {
                    stack.push(node.right);
                }
            }
        }

        return null;
    }

    /**
     * 层序遍历(广度遍历)简洁
     */
    public TreeNode searchBSTJj(TreeNode root, int val) {
        if (root == null || root.val == val) return root;

        while (root !=null) {
           if(val< root.val){
               root = root.left;
           }else if(val> root.val){
               return root.right;
           }else {
               return root;
           }
        }
        return null;
    }

}
验证结果
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容