小米面试题:合并二叉树
生活随笔
收集整理的這篇文章主要介紹了
小米面试题:合并二叉树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述:
給定兩個二叉樹,想象當你將它們中的一個覆蓋到另一個上時,兩個二叉樹的一些節點便會重疊。
你需要將他們合并為一個新的二叉樹。合并的規則是如果兩個節點重疊,那么將他們的值相加作為節點合并后的新值,否則不為?NULL 的節點將直接作為新二叉樹的節點。
示例?1:
?代碼:
//深度優先遍歷 func mergeTrees(t1, t2 *TreeNode) *TreeNode {if t1 == nil {return t2}if t2 == nil {return t1}t1.Val += t2.Val//左子樹進行merget1.Left = mergeTrees(t1.Left, t2.Left)//右子數進行merget1.Right = mergeTrees(t1.Right, t2.Right)return t1 }//廣度優先搜索 //廣度優先搜索需要借助隊列 func mergeTrees(t1, t2 *TreeNode) *TreeNode {if t1 == nil {return t2}if t2 == nil {return t1}//合并節點值merged := &TreeNode{Val: t1.Val + t2.Val}//隊列queue := []*TreeNode{merged}queue1 := []*TreeNode{t1}queue2 := []*TreeNode{t2}for len(queue1) > 0 && len(queue2) > 0 {node := queue[0]//queue 出隊queue = queue[1:]node1 := queue1[0]//queue1出隊queue1 = queue1[1:]node2 := queue2[0]queue2出隊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//入隊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/
?
總結
以上是生活随笔為你收集整理的小米面试题:合并二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis常见关键字
- 下一篇: 关于周排名