LeetCode - Easy - 872. Leaf-Similar Trees

Topic

  • Tree
  • Depth-first Search

Description

https://leetcode.com/problems/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.

LeetCode - Easy - 872. Leaf-Similar Trees

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.

Example 1:
LeetCode - Easy - 872. Leaf-Similar Trees

Input: root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 = [3,5,1,6,7,4,2,null,null,null,null,null,null,9,8]
Output: true

Example 2:

Input: root1 = [1], root2 = [1]
Output: true

Example 3:

Input: root1 = [1], root2 = [2]
Output: false

Example 4:

Input: root1 = [1,2], root2 = [2,2]
Output: true

Example 5:

LeetCode - Easy - 872. Leaf-Similar Trees

Input: root1 = [1,2,3], root2 = [1,3,2]
Output: false

Constraints:

  • The number of nodes in each tree will be in the range [1, 200].
  • Both of the given trees will have values in the range [0, 200].

Analysis

用到方便中断的迭代版前序遍历模式。

Submission

import java.util.LinkedList;

import com.lun.util.BinaryTree.TreeNode;

public class LeafSimilarTrees {
	
    public boolean leafSimilar(TreeNode root1, TreeNode root2) {
        
    	LinkedList<TreeNode> stack1 = new LinkedList<>(), //
    			stack2 = new LinkedList<>();
    	stack1.push(root1);
    	stack2.push(root2);
    	while(true) {
    		TreeNode leaf1 = getLeaf(stack1);
    		TreeNode leaf2 = getLeaf(stack2);
    		
    		if(leaf1 == null ^ leaf2 == null) {
    			return false;
    		}else if(leaf1 == null && leaf2 == null) {
    			return true;
    		}else {
    			if(leaf1.val != leaf2.val)
    				return false;
    		}
    	}
    }
    
    private TreeNode getLeaf(LinkedList<TreeNode> stack) {
    	
		while(!stack.isEmpty()) {    			
			TreeNode node = stack.pop();
			
			if(node.left == null && node.right == null)
				return node;
			
			if(node.right != null)
				stack.push(node.right);
			
			if(node.left != null)
				stack.push(node.left);
		}
    	
    	return null;
    }
    
}

Test

import static org.junit.Assert.*;
import static com.lun.util.BinaryTree.integers2BinaryTree;
import org.junit.Test;

import com.lun.util.BinaryTree.TreeNode;

public class LeafSimilarTreesTest {

	@Test
	public void test() {
		LeafSimilarTrees obj = new LeafSimilarTrees();

		TreeNode root1 = integers2BinaryTree(3,5,1,6,2,9,8,null,null,7,4);
		TreeNode root2 = integers2BinaryTree(3,5,1,6,7,4,2,null,null,null,null,null,null,9,8);
		
		assertTrue(obj.leafSimilar(root1, root2));
		assertTrue(obj.leafSimilar(integers2BinaryTree(1), integers2BinaryTree(1)));
		assertFalse(obj.leafSimilar(integers2BinaryTree(1), integers2BinaryTree(2)));
		assertTrue(obj.leafSimilar(integers2BinaryTree(1, 2), integers2BinaryTree(2, 2)));
		assertFalse(obj.leafSimilar(integers2BinaryTree(1, 2, 3), integers2BinaryTree(1,3,2)));
		assertFalse(obj.leafSimilar(integers2BinaryTree(3,5,1,6,7,4,2,null,null,null,null,null,null,9,11,null,null,8,10),// 
						integers2BinaryTree(3,5,1,6,2,9,8,null,null,7,4)));
	}
}

上一篇:2021-08-05


下一篇:[LeetCode] 1214. Two Sum BSTs