LeetCode 100. Same Tree
原题链接在这里:https://leetcode.com/problems/same-tree/
题目:
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.
题解:
树的题目多用递归可以简单地写出来。
终止条件:若左右都为空就return true; 若一个为空另一个不为空 return false; 最后两个都不为空时,值不同return false.
Time Complexity: O(n), n是tree的node数目. Space O(logn).
AC Java:
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 public class Solution { 11 public boolean isSameTree(TreeNode p, TreeNode q) { 12 if(p == null && q == null){ 13 return true; 14 } 15 if(p == null || q == null){ 16 return false; 17 } 18 if(p.val != q.val){ 19 return false; 20 } 21 return isSameTree(p.left,q.left) && isSameTree(p.right,q.right); 22 } 23 }
AC JavaScript:
1 /** 2 * Definition for a binary tree node. 3 * function TreeNode(val) { 4 * this.val = val; 5 * this.left = this.right = null; 6 * } 7 */ 8 /** 9 * @param {TreeNode} p 10 * @param {TreeNode} q 11 * @return {boolean} 12 */ 13 var isSameTree = function(p, q) { 14 if(!p || !q){ 15 return !p && !q; 16 } 17 18 return p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right); 19 };
AC C++:
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode() : val(0), left(nullptr), right(nullptr) {} 8 * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} 9 * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} 10 * }; 11 */ 12 class Solution { 13 public: 14 bool isSameTree(TreeNode* p, TreeNode* q) { 15 if(!p && !q){ 16 return true; 17 } 18 19 if(!p || !q){ 20 return false; 21 } 22 23 return p->val == q->val && isSameTree(p->left, q->left) && isSameTree(p->right, q->right); 24 } 25 };