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.
이진 트리의 모든 잎들을 왼쪽에서 오른쪽 순서로 고려할 때, 그 잎들의 값은 잎 값 시퀀스를 형성합니다.
예를 들어, 위에 주어진 트리에서 잎 값 시퀀스는 (6, 7, 4, 9, 8)
입니다.
두 이진 트리가 같은 잎 값 시퀀스를 가지고 있다면, 잎-유사(leaf-similar)로 간주됩니다.
두 주어진 트리의 머리 노드 root1
과 root2
가 잎-유사하면 true
를 반환하세요.
예시 1:
예시 2:
제약 사항:
[1, 200]
범위에 있을 것입니다.[0, 200]
범위의 값을 가질 것입니다.import java.util.Stack;
class Solution {
public boolean leafSimilar(TreeNode root1, TreeNode root2) {
Stack<Integer> root1Leaf = new Stack<>();
getLeafNode(root1, root1Leaf);
Stack<Integer> root2Leaf = new Stack<>();
getLeafNode(root2, root2Leaf);
if (root1Leaf.size() != root2Leaf.size())
return false;
while (!root1Leaf.isEmpty()) {
// Integer를 == 비교하면 -128 ~ 127 까지의 값만 비교가능
if (!root1Leaf.pop().equals(root2Leaf.pop())) {
return false;
}
}
return true;
}
public void getLeafNode(TreeNode node, Stack<Integer> stack) {
//마지막 노드 일경우 push
if (node.left == null && node.right == null) {
stack.push(node.val);
}
if (node.left != null)
getLeafNode(node.left, stack);
if (node.right != null)
getLeafNode(node.right, stack);
}
}