leetcode#遞迴#865. 具有所有最深結點的最小子樹

.GEEK發表於2020-10-13
  1. 具有所有最深結點的最小子樹

給定一個根為 root 的二叉樹,每個結點的深度是它到根的最短距離。

如果一個結點在整個樹的任意結點之間具有最大的深度,則該結點是最深的。

一個結點的子樹是該結點加上它的所有後代的集合。

返回能滿足“以該結點為根的子樹中包含所有最深的結點”這一條件的具有最大深度的結點。

示例:

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/smallest-subtree-with-all-the-deepest-nodes
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

/**
 * 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 subtreeWithAllDeepest(TreeNode root) {
        if(root == null) return null;
        //最深節點的父親節點
        // Tree tree = new Tree(root);
        int dl = Tree.depth(root.left);
        int dr = Tree.depth(root.right);
        if(dl==dr) return root;
        if(dl>dr) {
            return subtreeWithAllDeepest(root.left);
        }else{
            return subtreeWithAllDeepest(root.right);
        }
    }

  
    static class Tree {
        // TreeNode root = null;
        // Tree(TreeNode root) {this.root = root;}
        static int depth(TreeNode root) {
            if(root ==null) return 0;
            return Math.max(depth(root.left),depth(root.right))+1;
        }

        


    }
}

相關文章