zoukankan      html  css  js  c++  java
  • [LeetCode] 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.
     
    The straightforward solution is to use DFS to get both the leaf sequence first then compare them. An even better solution is to compare one leaf node at a time, providing the possiblity of early traverse termination.  To return leaf node value one at a time and keep track unvisited leaf nodes, we use a stack. Since stack is LIFO and we need to visit left leaf nodes first, we push a node's right child into the stack first, then left child. 
     
    /**
     * 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) {
            Stack<TreeNode> s1 = new Stack<>();
            Stack<TreeNode> s2 = new Stack<>();
            
            s1.push(root1); s2.push(root2);
            while(!s1.isEmpty() && !s2.isEmpty()) {
                if(dfs(s1) != dfs(s2)) {
                    return false;
                }
            }
            return s1.isEmpty() && s2.isEmpty();
        }
        private int dfs(Stack<TreeNode> stack) {
            while(true) {
                TreeNode node = stack.pop();
                if(node.right != null) stack.push(node.right);
                if(node.left != null) stack.push(node.left);
                if(node.left == null && node.right == null) return node.val;            
            }
        }
    }
     
    Related Topics
    How to traverse a binary tree in pre-order, in-order and post-order iteratively?(not using recursion)
     
  • 相关阅读:
    python3中的匿名函数
    python3拆包、元组、字典
    python3函数中的不定长参数
    python3中的缺省参数和命名参数
    python3字符串的常见操作
    用python使用Mysql数据库
    Git常用命令
    Linux下配置Nginx(在root的/etc/rc.local里配置开机启动功能http://tengine.taobao.org/)
    大数据项目中js中代码和java中代码(解决Tomcat打印日志中文乱码)
    java中时间
  • 原文地址:https://www.cnblogs.com/lz87/p/10372300.html
Copyright © 2011-2022 走看看