1123. Lowest Common Ancestor of Deepest Leaves

https://www.cnblogs.com/grandyang/p/11397303.html

ๅฐฑๅ…ˆไปŽๆœ€็ฎ€ๅ•็š„ๆƒ…ๅ†ตๅผ€ๅง‹ๅˆ†ๆžๅง๏ผŒ

  • ๅ‡ๅฆ‚ root ไธบ็ฉบ๏ผŒๅˆ™็›ดๆŽฅ่ฟ”ๅ›ž nullptr๏ผŒ

  • ๅ‡ๅฆ‚ root ๆฒกๆœ‰ๅญ็ป“็‚น๏ผŒๅ…ถๆœฌ่บซๅฐฑๆ˜ฏๆœ€ๆทฑๅถ็ป“็‚น๏ผŒ่ฟ”ๅ›ž rootใ€‚

  • ่‹ฅ root ๆœ‰ๅทฆๅณๅญ็ป“็‚น๏ผŒ่ฏดๆ˜Žๅทฆๅณๅญๆ ‘ๅญ˜ๅœจ๏ผŒ้€šๅธธๆƒ…ๅ†ตไธ‹ๆˆ‘ไปฌไผšๅฏนๅทฆๅณๅญ็ป“็‚น่ฐƒ็”จ้€’ๅฝ’๏ผŒ้‚ฃไนˆ่ฟ”ๅ›ž็š„ๅฐฑๆ˜ฏๅทฆๅณๅญๆ ‘ๅˆ†ๅˆซ็š„ๆœ€ๆทฑๅถ็ป“็‚น็š„ๆœ€ๅฐๅ…ฌๅ…ฑ็ˆถ่Š‚็‚น๏ผŒ

ไฝ†ๆ˜ฏ้—ฎ้ข˜ๆฅไบ†๏ผŒๅฐฑ็ฎ—ๅˆ†ๅˆซ็Ÿฅ้“ไบ†ๅทฆๅณๅญๆ ‘็š„ๆœ€ๆทฑ็ป“็‚น็š„ LCA๏ผŒๆ€ŽไนˆๆŽจๅ‡บๅฝ“ๅ‰ๆ ‘็š„ LCA๏ผŸ

  • ่‹ฅๅทฆๅญๆ ‘็š„ๆœ€ๆทฑๅถ็ป“็‚น็š„ๆทฑๅบฆๆ›ดๆทฑ๏ผŒๅˆ™ๅบ”่ฏฅ่ฟ”ๅ›žๅทฆๅญๆ ‘็š„ LCA๏ผŒ

  • ่‹ฅๅณๅญๆ ‘็š„ๆœ€ๆทฑๅถ็ป“็‚น็š„ๆทฑๅบฆๆ›ดๆทฑ๏ผŒๅˆ™ๅบ”่ฏฅ่ฟ”ๅ›žๅณๅญๆ ‘็š„ LCA๏ผŒ

  • ่‹ฅไบŒ่€…ไธ€ๆ ทๆทฑ๏ผŒๅˆ™่ฆ่ฟ”ๅ›žๅฝ“ๅ‰็ป“็‚นใ€‚

่ฟ™ๆ ท็š„่ฏ๏ผŒๅฏนไบŽๆฏไธช็ป“็‚น node๏ผŒๅฟ…้กป่ฆๅˆ†ๅˆซ็Ÿฅ้“ๅ…ถๅทฆๅณๅญๆ ‘็š„ๆœ€ๆทฑๅถ็ป“็‚น็š„ๆทฑๅบฆๆ‰่กŒ๏ผŒๅฏไปฅไฝฟ็”จไธ€ไธช getDepth ๅ‡ฝๆ•ฐๆฅๆฑ‚ไปปๆ„็ป“็‚นๅˆฐๅถ็ป“็‚น็š„ๆœ€ๅคงๆทฑๅบฆ๏ผŒๅถ็ป“็‚นๆœฌ่บซ็š„ๆทฑๅบฆไธบ0ใ€‚ๆœ‰ไบ†่ฟ™ไธชๅ‡ฝๆ•ฐ๏ผŒๅฐฑๅฏไปฅๅฏนๅฝ“ๅ‰็ป“็‚น็š„ๅทฆๅณๅญ็ป“็‚น่ฎก็ฎ—ๆทฑๅบฆ๏ผŒ่‹ฅๆทฑๅบฆ็›ธๅŒ๏ผŒๅˆ™่ฟ”ๅ›žๅฝ“ๅ‰็ป“็‚น๏ผŒๅฆๅˆ™ๅฏนๆทฑๅบฆๅคง็š„ๅญ็ป“็‚น่ฐƒ็”จ้€’ๅฝ’๏ผŒๆ€Žไนˆ้š็บฆๆ„Ÿ่ง‰ๆœ‰ไบ›ไบŒๅˆ†ๆœ็ดขๆณ•็š„ๅฝฑๅญๅœจ้‡Œ้ข

T: O(n^2)

class Solution {
    public TreeNode lcaDeepestLeaves(TreeNode root) {
        if (root == null) {
            return null;
        }
        int left = getDepth(root.left);
        int right = getDepth(root.right);
        if (left == right) {
            return root;
        }
        return (left > right) ? lcaDeepestLeaves(root.left) : lcaDeepestLeaves(root.right);
    }
    private int getDepth(TreeNode root) {
        if(root == null) {
            return 0;
        }
        return Math.max(getDepth(root.left), getDepth(root.right))+1;
    }
}

็”ฑไบŽ่ฎก็ฎ—ๆทฑๅบฆ็š„ๅ‡ฝๆ•ฐ getDepth ๅญ˜ๅœจๅคง้‡็š„้‡ๅค่ฎก็ฎ—๏ผŒๅฏไปฅไฝฟ็”จไธ€ไธช HashMap ๆฅไฟๅญ˜ๅทฒ็ป็ฎ—่ฟ‡ๆทฑๅบฆ็š„็ป“็‚น๏ผŒ่ฟ™ๆ ทๅ†ๆฌก้‡ๅˆฐ็š„ๆ—ถๅ€™๏ผŒ็›ดๆŽฅไปŽ HashMap ไธญๅ–ๅ€ผๅณๅฏ๏ผŒๅฏไปฅไฝฟ่ฎก็ฎ—ๆ•ˆ็Ž‡ๆ›ด้ซ˜ไธ€ไบ›

T: O(n)

class Solution {
    Map<TreeNode, Integer> map = new HashMap<>();
    public TreeNode lcaDeepestLeaves(TreeNode root) {
        if (root == null) {
            return null;
        }
        int left = getDepth(root.left);
        int right = getDepth(root.right);
        if (left == right) {
            return root;
        }
        return (left > right) ? lcaDeepestLeaves(root.left) : lcaDeepestLeaves(root.right);
    }
    private int getDepth(TreeNode root) {
        if(root == null) {
            return 0;
        }
        if (map.containsKey(root)) {
            return map.get(root);
        }
        map.put(root, Math.max(getDepth(root.left), getDepth(root.right))+1);
        return map.get(root);
    }
}

Last updated