【备战字节面试】算法特训-二叉树

149 阅读1分钟

简单粗暴,记录备战过程,持续更新

二叉树

二叉树数据结构都太熟了,不多说了。

适用场景

实战1 leetcode 236. 二叉树的最近公共祖先

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {

    private TreeNode ans;

    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        dfs(root,p,q);
        return ans;
    }

    private boolean dfs(TreeNode root , TreeNode p , TreeNode q){
        if(root == null){
            return false;
        }
        boolean leftBool = dfs(root.left, p , q);
        boolean rightBool = dfs(root.right,p ,q);
        // 本节点是公共祖先
        if((root.val == p.val || root.val == q.val) && (leftBool || rightBool)){
            ans = root;
        }
        if(leftBool && rightBool){
            ans = root;
        }
        return leftBool || rightBool || (root.val == p.val) || (root.val == q.val);
    }
}

实战2 700. 二叉搜索树中的搜索

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        if(null == root){
            return null;
        }
        if(val == root.val){
            return root;
        }
        TreeNode left = searchBST(root.left,val);
        TreeNode right = searchBST(root.right,val);
        return null == left ? (null == right ? null : right) : left;
    }
}