T1 26. 树的子结构
原树:树A,目标树:树B
子结构的根节点可能为树 A 的任意一个节点
step1:判断A中是否有[B的根节点相同的节点
step2:判断A是否有B的结构
class Solution {
public boolean isSubStructure(TreeNode A, TreeNode B) {
//情况一:A空或B空 情况二:两树非空,递归自身调用recur
return (A!=null && B!=null)&&(recur(A,B)||isSubStructure(A.left,B)||isSubStructure(A.right,B));
}
public boolean recur(TreeNode A,TreeNode B){
if(B == null) return true; //遍历完目标数,或者目标空
if(A == null||A.val != B.val) return false; //B树的根节点不是A树的任何一个节点
//递归保证叶子节点
return recur(A.left,B.left)&&recur(A.right,B.right);
}
}
T2 27. 二叉树的镜像
dfs 深度优先搜索算法Depth-First-Search 本题使用递归法实现bfs
class Solution {
public TreeNode mirrorTree(TreeNode root) {
if(root==null){
return null;
}
TreeNode tmp = root.right;
root.right = mirrorTree(root.left);
root.left = mirrorTree(tmp);
return root;
}
}
T3 28. 对称的二叉树
result = boolean_test_statement ? value1 : value2;
Java
如果boolean_test_statement
为true
,则将value1
分配给result
变量,否则将value2
分配给result
变量。
class Solution {
public boolean isSymmetric(TreeNode root) {
//三目运算符
return root == null ? true: recur(root.left,root.right);
}
public boolean recur(TreeNode L,TreeNode R){
//同时遍历完
if(L==null && R==null) return true;
//一边先遍历完或者左右节点值不想等
if(L==null || R==null || L.val!=R.val) return false;
return recur(L.left,R.right)&& recur(L.right,R.left);
}
}