Same Tree(LeetCode)
来源:互联网 发布:ps mac版破解 编辑:程序博客网 时间:2024/06/05 11:51
题目:Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
递归方法解决:
class Solution {public:bool isSameTree(TreeNode *p, TreeNode *q) {//判断当前树是否相同if(p==NULL && q==NULL)//都为空return true;if(p==NULL || q==NULL)//有一个为空return false;if(p->val!=q->val)//都不为空return false;//判断两颗树的左右子树是否相等return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);}};
非递归方法解决:
分析:此方法利用空指针域,如果指针为空,则相当于遍历到INT_MAX,主要是解决结点值有重复的情况。
例如:
1
/ \
# 1
/ \
# #
和
1
/ \
1 #
/ \
# #
此时两棵树的先序和中序遍历结果会不同,能够判断不是 Same Tree。
class Solution {public:bool isSameTree(TreeNode *p, TreeNode *q) {if(p==NULL && q==NULL)return true;if(p==NULL || q==NULL)return false;vector<int> pVec,qVec;PreOrderTraverse(p,pVec);PreOrderTraverse(q,qVec);if(!isTraverseSame(pVec,qVec))return false;pVec.clear();qVec.clear();InOrderTraverse(p,pVec);InOrderTraverse(q,qVec);if(!isTraverseSame(pVec,qVec))return false;return true;}void PreOrderTraverse(TreeNode* root,vector<int> & preOrderVec){if(root!=NULL){preOrderVec.push_back(root->val);PreOrderTraverse(root->left,preOrderVec);PreOrderTraverse(root->right,preOrderVec);}else{preOrderVec.push_back(INT_MAX);//利用空指针域}}void InOrderTraverse(TreeNode* root,vector<int> & inOrderVec){if(root!=NULL){PreOrderTraverse(root->left,inOrderVec);inOrderVec.push_back(root->val);PreOrderTraverse(root->right,inOrderVec);}else{inOrderVec.push_back(INT_MAX);}}bool isTraverseSame(vector<int> &ppreOrderVec,vector<int> &qpreOrderVec){vector<int>::iterator piter=ppreOrderVec.begin();vector<int>::iterator qiter=qpreOrderVec.begin();while(piter!=ppreOrderVec.end()){if(*piter!=*qiter)return false;piter++;qiter++;}return true;}};
0 0
- Leetcode - Tree - Same Tree
- [leetcode][tree] Same Tree
- LeetCode: Same Tree
- LeetCode Same Tree
- [Leetcode] Same Tree
- LeetCode : Same Tree
- [LeetCode] Same Tree
- leetcode 65: Same Tree
- Leetcode 100 Same Tree
- [leetcode] Same Tree
- [LeetCode]Same Tree
- [leetcode]Same Tree
- [Leetcode]Same Tree
- Leetcode: Same Tree
- [LeetCode] Same Tree
- LeetCode-Same Tree
- [leetcode] Same Tree
- LeetCode - Same Tree
- 我们为什么要学java
- ResourceBundle读取properties文件
- 常见SQL性能优化
- centos 7.0 网卡配置及重命名教程(转)
- ios开发之如何从一个应用跳转到另一个应用(应用间跳转)
- Same Tree(LeetCode)
- Linux kernel编译错误
- Java:重写equals()和hashCode()
- 解决windows xp中不能使用gdiplus.dll 1.1的问题(vs2010中如何添加manifest文件)
- WPF Command 案例
- ps学习历程3
- 地图-大头针视图
- rowid format and the format of a row piece
- python 图论算法(一)