Leetcode:100. Same Tree
来源:互联网 发布:东莞网站关键词优化 编辑:程序博客网 时间:2024/06/06 01:38
Description
解题思路
采用DFS递归式的查找比较,若有一个不相等则返回false
/** * 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 isSameTree(TreeNode* p, TreeNode* q) { if(p == NULL || q == NULL) return (p==q); return (p->val == q->val && isSameTree(p->left,q->left) && isSameTree(p->right,q->right)); }};
非递归解法,利用栈,将相同的数压入栈,若不相同或一方为空则返回false,到下一个数时pop到上一个数,若两棵树相等则遍历结束时必然两个站均为空。
/** * 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 isSameTree(TreeNode* p, TreeNode* q) { stack<TreeNode*> stk1; stack<TreeNode*> stk2; stk1.push(p); stk2.push(q); while(!stk1.empty() && !stk2.empty()){ TreeNode* tmp1 = stk1.top(); TreeNode* tmp2 = stk2.top(); stk1.pop(); stk2.pop(); if(tmp1 && tmp2){ if(tmp1->val != tmp2->val) return false; stk1.push(tmp1->left); stk1.push(tmp1->right); stk2.push(tmp2->left); stk2.push(tmp2->right); } if((tmp1 && !tmp2) || (!tmp1 && tmp2)) return false; } return stk1.empty() == stk2.empty(); }};
阅读全文