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.
解题:还是简单的递归,把情况考虑清楚就可以了:
根节点都为空,树相同;
根节点一方为空,另一方不为空,树不相同;
根节点值不想等,树不相同;
否则,递归比较左右子树是否相同。
代码:
1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 bool isSameTree(TreeNode *p, TreeNode *q) { 13 if(p == NULL && q == NULL) 14 return true; 15 if((p == NULL && q != NULL) ||(p != NULL && q == NULL)) 16 return false; 17 if(p->val != q->val) 18 return false; 19 return isSameTree(p->left,q->left) && isSameTree(p->right,q->right); 20 } 21 };
Java版本代码:
1 public class Solution { 2 public boolean isSameTree(TreeNode p, TreeNode q) { 3 int ispempty = p == null?0:1; 4 int isqempty = q == null?0:1; 5 if(ispempty != isqempty) 6 return false; 7 return isSameTreeHelper(p, q); 8 } 9 public boolean isSameTreeHelper(TreeNode p,TreeNode q){ 10 if(p == null && q == null) 11 return true; 12 if(p.val != q.val) 13 return false; 14 15 int pleftempty = p.left == null?0:1; 16 int qleftempty = q.left == null?0:1; 17 if(pleftempty != qleftempty) 18 return false; 19 if(isSameTreeHelper(p.left, q.left) == false) 20 return false; 21 22 int prightempty = p.right == null?0:1; 23 int qrightempty = q.right == null?0:1; 24 if(prightempty != qrightempty) 25 return false; 26 if(isSameTreeHelper(p.right, q.right) == false) 27 return false; 28 29 return true; 30 31 } 32 }
Java版本写复杂了=。=