lc100判断两棵树是否相同
两棵树同时进行前序遍历。
先判断根节点是否相同,再判断左右子节点。
public boolean 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); }
lc101判断是否是对称树
递归判断两个子树的内侧节点和外侧节点是否相等。
一个遍历顺序是左右中,一个是右左中。
public boolean check(TreeNode t1,TreeNode t2){ if(t1==null&&t2==null){ return true; } if(t1==null||t2==null){ return false; } if(t1.val != t2.val){ //一定要放第三个,保证不为空 return false; } return check(t1.left,t2.right)&&check(t1.right,t2.left); } public boolean isSymmetric(TreeNode root) { if(root==null){ return true; } return check(root.left,root.right); }
lc617合并二叉树
不同合并情况有三种:
-
空,空=》空
-
空,不空=》不空
-
不空,不空=》值相加
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) { if(root1==null){ return root2; } if(root2==null){ return root1; } TreeNode merged=new TreeNode(root1.val+root2.val); merged.left=mergeTrees(root1.left,root2.left); merged.right=mergeTrees(root1.right,root2.right); return merged; }