小米面试题:合并二叉树
生活随笔
收集整理的這篇文章主要介紹了
小米面试题:合并二叉树
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目描述:
給定兩個(gè)二叉樹(shù),想象當(dāng)你將它們中的一個(gè)覆蓋到另一個(gè)上時(shí),兩個(gè)二叉樹(shù)的一些節(jié)點(diǎn)便會(huì)重疊。
你需要將他們合并為一個(gè)新的二叉樹(shù)。合并的規(guī)則是如果兩個(gè)節(jié)點(diǎn)重疊,那么將他們的值相加作為節(jié)點(diǎn)合并后的新值,否則不為?NULL 的節(jié)點(diǎn)將直接作為新二叉樹(shù)的節(jié)點(diǎn)。
示例?1:
?代碼:
//深度優(yōu)先遍歷 func mergeTrees(t1, t2 *TreeNode) *TreeNode {if t1 == nil {return t2}if t2 == nil {return t1}t1.Val += t2.Val//左子樹(shù)進(jìn)行merget1.Left = mergeTrees(t1.Left, t2.Left)//右子數(shù)進(jìn)行merget1.Right = mergeTrees(t1.Right, t2.Right)return t1 }//廣度優(yōu)先搜索 //廣度優(yōu)先搜索需要借助隊(duì)列 func mergeTrees(t1, t2 *TreeNode) *TreeNode {if t1 == nil {return t2}if t2 == nil {return t1}//合并節(jié)點(diǎn)值merged := &TreeNode{Val: t1.Val + t2.Val}//隊(duì)列queue := []*TreeNode{merged}queue1 := []*TreeNode{t1}queue2 := []*TreeNode{t2}for len(queue1) > 0 && len(queue2) > 0 {node := queue[0]//queue 出隊(duì)queue = queue[1:]node1 := queue1[0]//queue1出隊(duì)queue1 = queue1[1:]node2 := queue2[0]queue2出隊(duì)queue2 = queue2[1:]left1, right1 := node1.Left, node1.Rightleft2, right2 := node2.Left, node2.Rightif left1 != nil || left2 != nil {if left1 != nil && left2 != nil {left := &TreeNode{Val: left1.Val + left2.Val}node.Left = left//入隊(duì)queue = append(queue, left)queue1 = append(queue1, left1)queue2 = append(queue2, left2)} else if left1 != nil {node.Left = left1} else { // left2 != nilnode.Left = left2}}if right1 != nil || right2 != nil {if right1 != nil && right2 != nil {right := &TreeNode{Val: right1.Val + right2.Val}node.Right = rightqueue = append(queue, right)queue1 = append(queue1, right1)queue2 = append(queue2, right2)} else if right1 != nil {node.Right = right1} else { // right2 != nilnode.Right = right2}}}return merged }?
參考地址:https://leetcode-cn.com/problems/merge-two-binary-trees/solution/he-bing-er-cha-shu-by-leetcode-solution/
?
總結(jié)
以上是生活随笔為你收集整理的小米面试题:合并二叉树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: redis常见关键字
- 下一篇: 关于周排名