首页 > 其他 > 详细

872. Leaf-Similar Trees

时间:2018-11-08 17:40:01      阅读:146      评论:0      收藏:0      [点我收藏+]
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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!