L617合并二叉树
GitHub 账户:LuvnJoae 欢迎关注! https://github.com/LuvnJoae
GitHub 代码链接:https://github.com/LuvnJoae/Java_leetcode
思路与结果
代码
思路1
package Day11_5_21.L617;
class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x){
val = x;
}
}
/**
* 思路1
1. 直接利用递归,依次叠加各节点的值就可以了
2. 先判断t1,t2是否为空,这样递归到最下面的节点就直接返回一个空节点。
a. 如果t1为空,那么返回t2
b. 如果t2为空,那么返回t1
c. 如果不满足上面两个条件,则
i. 新建一个节点,由于如果t1,t2有一个为空就已经返回了,所以可以给新节点的初值取为0.
ii. 新节点的值=t1的值+t2的值
iii. 递归进入左节点和右节点
iv. 返回新节点
反思
1. 其实不用定义新节点,直接在源节点的基础上覆盖就可以了,这样节省一点空间。
*/
public class Solution {
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
if (t1 == null) return t2;
if (t2 == null) return t1;
TreeNode newNode = new TreeNode(0);
newNode.val = t1.val + t2.val;
newNode.left = mergeTrees(t1.left,t2.left);
newNode.right = mergeTrees(t1.right,t2.right);
return newNode;
}
}
思路2
package Day11_5_21.L617;
/**
* 思路2
1. 和思路一一样,只不过不需要定义新的节点,直接左节点,或者右节点的值覆盖就好了
*/
public class Solution2 {
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
if (t1 == null) return t2;
if (t2 == null) return t1;
t1.val += t2.val;
// 再递归合并左右子树
t1.left = mergeTrees(t1.left, t2.left);
t1.right = mergeTrees(t1.right, t2.right);
return t1;
}
}
L226反转二叉树
思路与结果
代码
思路1
package Day11_5_21.L226;
class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x){
val = x;
}
}
/**
* 思路1
1. 还是递归,定义一个新节点,交换位置就可以了
2. 如果 节点==null,返回空
3. 节点不为空,
a. 定义一个新节点=left
b. Left = right
c. right=新节点
d. 对left 和 right 递归,再次调用本方法
返回 root(当前节点)
*/
public class Solution {
public TreeNode invertTree(TreeNode root) {
if (root == null) return null;
TreeNode newNode = invertTree(root.left);
root.left = invertTree(root.right);
root.right = newNode;
return root;
}
}
L104二叉树的最大深度
思路与结果
代码
思路1
package Day11_5_21.L104;
class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x){
val = x;
}
}
/**
* 思路1
1. 还是递归。
2. 节点为空,则返回0
3. 节点不为空,则返回左、右子树的高度
4. 返回时判断二者大小,返回更大的那个+1.
反思
代码可以更简洁
*/
public class Solution {
public int maxDepth(TreeNode root) {
if (root == null) return 0;
int i = maxDepth(root.left);
int j = maxDepth(root.right);
return i > j ? i+1 : j+1;
}
}
思路2
package Day11_5_21.L104;
/**
* 思路2
和思路一一样,代码更简洁
*/
public class Solution2 {
public int maxDepth(TreeNode root) {
return root == null ? 0 : Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}}