力扣刷题——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)    收藏  举报

导航