problem:
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 nodesroot1
androot2
are leaf-similar.
Note:
- Both of the given trees will have between
1
and100
nodes.
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool leafSimilar(TreeNode* root1, TreeNode* root2) {
stack<TreeNode*> stk1,stk2;
stk1.push(root1); stk2.push(root2);
while(!stk1.empty() && !stk2.empty())
if(dfs(stk1) != dfs(stk2))
return false;
return stk1.empty() && stk2.empty(); //则stk1和stk2都为empty,保证两棵树的叶子结点都遍历过了
}
//次方法可以从左向右按顺序获取叶子结点 ,类似next方法
int dfs(stack<TreeNode*> &stk){
while(true){
TreeNode* p=stk.top();stk.pop();
if(p->right)stk.push(p->right);
if(p->left)stk.push(p->left);
if(!p->left && !p->right)return p->val; //叶子结点
}
}
};