liuxuhelloworld's notebook

题目链接

https://leetcode-cn.com/problems/merge-two-binary-trees/

解答过程

这个题目我觉得不需要从DFS的角度考虑,就从递归的角度考虑就很好理解了。merge两个二叉树,那么显然可以理解为:merge它们的左子树,merge它们的右子树,merge根节点,并把merge左右子树的结果作为新的左右子树:

	public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
		if (root1 == null && root2 == null) {
			return null;
		} else if (root1 != null && root2 == null) {
			return root1;
		} else if (root1 == null && root2 != null) {
			return root2;
		} else {
			TreeNode left = mergeTrees(root1.left, root2.left);
			TreeNode right = mergeTrees(root1.right, root2.right);
			root1.val = root1.val + root2.val;
			root1.left = left;
			root1.right = right;

			return root1;
		}
	}

当然,这个递归的背后就是DFS,但我还是觉得单纯按递归来考虑更清晰简洁。