LeetCode 617. 合并二叉树
题目描述
思路分析
思路描述
我们可以使用迭代的方法来合并两棵树。具体步骤如下:
- 使用一个栈来存储需要处理的节点对。
- 每次从栈中取出一个节点对,如果两个节点都不为空,则将它们的值相加,并将它们的左右子节点对分别压入栈中。
- 如果其中一个节点为空,则直接将另一个节点作为合并后的节点。
参考代码
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
}
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用