872. Leaf-Similar Trees

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

 



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;
        }
    }

 

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.

posted on 2018-11-08 16:16  猪猪&#128055;  阅读(105)  评论(0)    收藏  举报

导航