题目:
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.
解释:
判断两棵树的叶子结点序列从左到右排列后是否一样。用前序遍历即可,但是只记录叶子结点,而不是记录所有结点。
python代码:
class Solution(object):
def leafSimilar(self, root1, root2):
"""
:type root1: TreeNode
:type root2: TreeNode
:rtype: bool
"""
#前序遍历
def pre(root,result):
if not root:
return
if not root.left and not root.right:
result.append(root.val)
pre(root.left,result)
pre(root.right,result)
result1=[]
result2=[]
pre(root1,result1)
pre(root2,result2)
return result1==result2
c++代码:
/**
* 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) {
vector<int> result1;
vector<int> result2;
pre(root1,result1);
pre(root2,result2);
return result1==result2;
}
void pre(TreeNode* root,vector<int>&result)
{
if(root)
{
if(root->left==NULL &&root->right==NULL)
result.push_back(root->val);
pre(root->left,result);
pre(root->right,result);
}
}
};
总结:
突然觉得c++代码也挺优美的是怎么回事…