LeetCode-617. 合并二叉树(Golang实现)

LeetCode题号:617. 合并二叉树

描述:

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。

你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。

示例 1:

输入: 
    Tree 1                     Tree 2                  
          1                         2                             
         / \                       / \                            
        3  2                  1  3                        
       /                          \   \                      
      5                           4  7                  
输出: 
合并后的树:
         3
        / \
       4  5
      / \   \ 
     5  4  7
注意: 合并必须从两个树的根节点开始。

解题思路:

使用深度优先搜索合并两二叉树。从根节点开始同时遍历两个二叉树,并将对应的节点进行合并。

两个二叉树的对应节点可能存在如下三种情况,对于每一种情况使用不同的合并方式。

  1. 如果两个二叉树的对于节点都为空,则合并后的二叉树的对应节点也为空。
  2. 如果两个二叉树的对应节点只有一个为空,则合并后的二叉树的对应节点为其中的非空节点。
  3. 如果两个二叉树的对应节点都不为空,则合并后的二叉树的对应节点的值为两二叉树对应节点的值之和,此时需要此时需要显性合并两个节点。

对一个节点进行合并之后,还要对该节点的左右子树分别进行合并。

这是一个递归的过程。

扫描二维码关注公众号,回复: 12869312 查看本文章
func mergeTrees(t1 *TreeNode, t2 *TreeNode) *TreeNode {
	if t1 == nil {
		return t2
	}
	if t2 == nil {
		return t1
	}
    node:=&TreeNode{Val:t2.Val + t1.Val}
    node.Left = mergeTrees(t1.Left,t2.Left)
    node.Right = mergeTrees(t1.Right,t2.Right)
	// t1.Val = t2.Val +t1.Val
	// t1.Left = mergeTrees(t1.Left,t2.Left)
	// t1.Right = mergeTrees(t1.Right,t2.Right)
	return node
}

往期回顾:

【1】LeetCode-876. 链表的中间结点(Goland实现)

【2】LeetCode-剑指 Offer 22. 链表中倒数第k个节点(Goland实现)

【3】LeetCode-21. 合并两个有序链表(Goland实现)


❤如果文章对您有所帮助,就在文章的右上角或者文章的末尾点个赞吧!(づ ̄ 3 ̄)づ 

❤如果喜欢大白兔分享的文章,就给大白兔点个关注吧!(๑′ᴗ‵๑)づ╭❤~

❤对文章有任何问题欢迎小伙伴们下方留言或者入群探讨【群号:708072830】

❤鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复讨论(请勿发表攻击言论)

猜你喜欢

转载自blog.csdn.net/weixin_43970743/article/details/108748340