力扣刷题——617.合并二叉树 (待优化
617. 合并二叉树
写的时候遇到一个疑惑的点,向下面这样的写法,获得的head永远是空的,为什么不会在merge方法通过tree给head赋值??
class Solution {
TreeNode head = null;
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
//合并两棵树
merge(head, root1);
merge(head, root2);
return head;
}
/**
* 将树合并到tree上
* @param tree
* @param toBeMerge
*/
public void merge(TreeNode tree, TreeNode toBeMerge) {
//判断待合并的树的当前结点是否为空
if (toBeMerge == null) {
return;
}
//不为空就再判断tree的当前结点是否为空,为空就创建在赋值,
if (tree == null) {
tree = new TreeNode(toBeMerge.val);
} else {//不为空就加上待合并树的当前结点的值
tree.val += toBeMerge.val;
}
//往下合并左子树和右子树
merge(tree.left, toBeMerge.left);
merge(tree.right, toBeMerge.right);
}
}
试了一下改成通过靠merge方法返回结点才可行,为什么没能直接靠形参为树节点赋值?
package leetcode;
import leetcode.utils.TreeNode;
public class T617 {
public static void main(String[] args) {
TreeNode root1 = TreeNode.geneTreeNode(new Integer[] { 1, 3, 2, 5 }, 0);
TreeNode root2 = TreeNode.geneTreeNode(new Integer[] { 2, 1, 3, null, 4, null, 7 }, 0);
TreeNode tree = new T617().new Solution().mergeTrees(root1, root2);
System.out.println(tree);
}
class Solution {
TreeNode head = null;
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
// 合并两棵树
head = merge(head, root1);
head = merge(head, root2);
return head;
}
/**
* 将树合并到tree上
*
* @param tree
* @param toBeMerge
*/
public TreeNode merge(TreeNode tree, TreeNode toBeMerge) {
// 判断待合并的树的当前结点是否为空
if (toBeMerge == null) {
//注意是返回tree,不是返回null,因为是将树合并到tree,
//toBeMerge为null时,tree不一定为null
return tree;
}
// 不为空就再判断tree的当前结点是否为空,为空就创建在赋值,
if (tree == null) {
tree = new TreeNode(toBeMerge.val);
} else {// 不为空就加上待合并树的当前结点的值
tree.val += toBeMerge.val;
}
// 往下合并左子树和右子树
tree.left = merge(tree.left, toBeMerge.left);
tree.right = merge(tree.right, toBeMerge.right);
return tree;
}
}
}
posted on 2023-02-18 18:17 pumpkinsBig 阅读(18) 评论(0) 收藏 举报
浙公网安备 33010602011771号