LeetCode 617. 合并二叉树

题目描述

617. 合并二叉树

思路分析

思路描述

我们可以使用迭代的方法来合并两棵树。具体步骤如下:

  1. 使用一个栈来存储需要处理的节点对。
  2. 每次从栈中取出一个节点对,如果两个节点都不为空,则将它们的值相加,并将它们的左右子节点对分别压入栈中。
  3. 如果其中一个节点为空,则直接将另一个节点作为合并后的节点。

参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func mergeTrees(t1 *TreeNode, t2 *TreeNode) *TreeNode {
	if t1 == nil {
		return t2
	}
	if t2 == nil {
		return t1
	}

	// 创建一个新的节点,其值为两棵树的当前节点值之和
	merged := &TreeNode{Val: t1.Val + t2.Val}

	// 递归地合并左子树和右子树
	merged.Left = mergeTrees(t1.Left, t2.Left)
	merged.Right = mergeTrees(t1.Right, t2.Right)

	return merged
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
type NodePair struct {
	LeftTree  *TreeNode
	RightTree *TreeNode
}

func mergeTrees(t1 *TreeNode, t2 *TreeNode) *TreeNode {
	if t1 == nil {
		return t2
	}
	if t2 == nil {
		return t1
	}

	stack := []NodePair

	for len(stack) > 0 {
		pair := stack[len(stack)-1]
		stack = stack[:len(stack)-1]

		if pair.LeftTree == nil || pair.RightTree == nil {
			continue
		}

		pair.LeftTree.Val += pair.RightTree.Val

		if pair.LeftTree.Left == nil {
			pair.LeftTree.Left = pair.RightTree.Left
		} else {
			stack = append(stack, NodePair{LeftTree: pair.LeftTree.Left, RightTree: pair.RightTree.Left})
		}

		if pair.LeftTree.Right == nil {
			pair.LeftTree.Right = pair.RightTree.Right
		} else {
			stack = append(stack, NodePair{LeftTree: pair.LeftTree.Right, RightTree: pair.RightTree.Right})
		}
	}

	return t1
}

➡️ 点击查看 Java 题解

1
write your code here
本文作者:
本文链接: https://hgnulb.github.io/blog/2023/38409747
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!