zoukankan      html  css  js  c++  java
  • 872. Leaf-Similar Trees

    Consider all the leaves of a binary tree.  From left to right order, the values of those leaves form a leaf value sequence.

    For example, in the given tree above, the leaf value sequence is (6, 7, 4, 9, 8).

    Two binary trees are considered leaf-similar if their leaf value sequence is the same.

    Return true if and only if the two given trees with head nodes root1 and root2 are leaf-similar.

    Note:

    • Both of the given trees will have between 1 and 100 nodes.

    M1: 把两个树的leaf都存下来,再比较

    time: O(n), space: O(logn)

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public boolean leafSimilar(TreeNode root1, TreeNode root2) {
            if(root1 == null && root2 == null) {
                return true;
            }
            if(root1 == null || root2 == null) {
                return false;
            }
            List<Integer> l1 = leaves(root1, new ArrayList<>());
            List<Integer> l2 = leaves(root2, new ArrayList<>());
            return l1.equals(l2);
        }
        
        public List<Integer> leaves(TreeNode root, List<Integer> list) {
            if(root == null) {
                return null;
            }
            if(root.left == null && root.right == null) {
                list.add(root.val);
            }
            leaves(root.left, list);
            leaves(root.right, list);
            return list;
        }
    }

    M2: 用一个stack记录dfs的路径,一旦dfs过程中有对应leaf的值不相等就可以退出dfs,直接返回false,而不必走完全程

    time: O(n), space: O(logn)

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public boolean leafSimilar(TreeNode root1, TreeNode root2) {
            if(root1 == null && root2 == null) {
                return true;
            }
            if(root1 == null || root2 == null) {
                return false;
            }
            
            Stack<TreeNode> s1 = new Stack<>(), s2 = new Stack<>();
            s1.push(root1);
            s2.push(root2);
            
            while(!s1.isEmpty() && !s2.isEmpty()) {
                if(getLeaf(s1) != getLeaf(s2)) {
                    return false;
                }
            }
            return s1.isEmpty() && s2.isEmpty();
        }
    
        public int getLeaf(Stack<TreeNode> s) {
            while(true) {
                TreeNode t = s.pop();
                if(t.left == null && t.right == null) {
                    return t.val;
                }
                if(t.right != null) {
                    s.push(t.right);
                }
                if(t.left != null) {
                    s.push(t.left);
                }
            }
        }
    }
  • 相关阅读:
    POJ 1930 Dead Fraction (循环小数-GCD)
    AOJ 0005 GCD and LCM
    POJ 2395 Out of Hay (Kruskal)
    AOJ 2224 Save your cats (Kruskal)
    POJ 2377 Bad Cowtractors (Kruskal)
    POJ 1258 Agri-Net (Prim&Kruskal)
    AOJ 2200 Mr. Rito Post Office (floyd+DP)
    AOJ 2249 Road Construction (dijkstra)
    调用html进行android布局
    jsp生成静态html页面
  • 原文地址:https://www.cnblogs.com/fatttcat/p/10198574.html
Copyright © 2011-2022 走看看