码迷,mamicode.com
首页 > 其他好文 > 详细

872. Leaf-Similar Trees

时间:2018-11-08 18:30:29      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:while   class   stringbu   Plan   lin   exp   values   root   space   

https://leetcode.com/problems/leaf-similar-trees/discuss/152358/Simple-6-lines-Java-StringBuilder-+-traverse-with-explanation



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.
 



Sol 1 


class Solution {
    // preorder , root, left, right 
    public boolean leafSimilar(TreeNode root1, TreeNode root2) {
        StringBuilder sb1 = new StringBuilder();
        StringBuilder sb2 = new StringBuilder();
        traverse(root1, sb1);
        traverse(root2, sb2);
        return sb1.toString().equals(sb2.toString()); 
    }
    private void traverse(TreeNode node, StringBuilder sb){
        // base case
        if(node == null) return;
        if(node.left == null && node.right == null) sb.append(node.val + ",");
        traverse(node.left, sb);
        traverse(node.right, sb);
    }
}




class Solution {
    // inorder , left,root, right 
    public boolean leafSimilar(TreeNode root1, TreeNode root2) {
        StringBuilder sb1 = new StringBuilder();
        StringBuilder sb2 = new StringBuilder();
        traverse(root1, sb1);
        traverse(root2, sb2);
        return sb1.toString().equals(sb2.toString()); 
    }
    private void traverse(TreeNode node, StringBuilder sb){
        // base case
        if(node == null) return;
        traverse(node.left, sb);
        if(node.left == null && node.right == null) sb.append(node.val + ",");
        
        traverse(node.right, sb);
    }
}




Sol 2 
O(logN) Space

https://leetcode.com/problems/leaf-similar-trees/discuss/152329/C++JavaPython-O(logN)-Space


    public boolean leafSimilar(TreeNode root1, TreeNode root2) {
        Stack<TreeNode> s1 = new Stack<>(), s2 = new Stack<>();
        s1.push(root1); s2.push(root2);
        while (!s1.empty() && !s2.empty())
            if (dfs(s1) != dfs(s2)) return false;
        return s1.empty() && s2.empty();
    }

    public int dfs(Stack<TreeNode> s) {
        while (true) {
            TreeNode node = s.pop();
            if (node.right != null) s.push(node.right);
            if (node.left != null) s.push(node.left);
            if (node.left == null && node.right == null) return node.val;
        }
    }

 

872. Leaf-Similar Trees

标签:while   class   stringbu   Plan   lin   exp   values   root   space   

原文地址:https://www.cnblogs.com/tobeabetterpig/p/9929776.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!