isSameTree1
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.
SOLUTION 1 & SOLUTION 2:
以下是递归及非递归解法:
1. 递归解法就是判断当前节点是不是相同,及左右子树是不是相同树
2. 非递归解法使用了先根遍历。这个算法比较简单一点
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 /** 2 * Definition for binary tree 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 // solution 1: 12 public boolean isSameTree1(TreeNode p, TreeNode q) { 13 if (p == null && q == null) { 14 return true; 15 } 16 17 if (p == null || q == null) { 18 return false; 19 } 20 21 return p.val == q.val && 22 isSameTree(p.left, q.left) && 23 isSameTree(p.right, q.right); 24 } 25 26 // Solution 2: 27 public boolean isSameTree(TreeNode p, TreeNode q) { 28 if (p == null && q == null) { 29 return true; 30 } 31 32 if (p == null || q == null) { 33 return false; 34 } 35 36 Stack<TreeNode> s1 = new Stack<TreeNode>(); 37 Stack<TreeNode> s2 = new Stack<TreeNode>(); 38 39 s1.push(p); 40 s2.push(q); 41 42 while (!s1.isEmpty() && !s2.isEmpty()) { 43 TreeNode cur1 = s1.pop(); 44 TreeNode cur2 = s2.pop(); 45 46 // 弹出的节点的值必须相等 47 if (cur1.val != cur2.val) { 48 return false; 49 } 50 51 // tree1的right节点,tree2的right节点,可以同时不为空,也可以同时为空,否则返回false. 52 if (cur1.left != null && cur2.left != null) { 53 s1.push(cur1.left); 54 s2.push(cur2.left); 55 } else if (!(cur1.left == null && cur2.left == null)) { 56 return false; 57 } 58 59 // tree1的左节点,tree2的left节点,可以同时不为空,也可以同时为空,否则返回false. 60 if (cur1.right != null && cur2.right != null) { 61 s1.push(cur1.right); 62 s2.push(cur2.right); 63 } else if (!(cur1.right == null && cur2.right == null)) { 64 return false; 65 } 66 } 67 68 return true; 69 } 70 }
GITHUB:
https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/tree/IsSameTree1.java