您好,登錄后才能下訂單哦!
這篇文章主要講解了“c++怎么計算二叉搜索樹中第K小的元素”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“c++怎么計算二叉搜索樹中第K小的元素”吧!
算法:
這類題目的核心思想是,利用二叉樹的中序遍歷是從小到大的,將其轉變成數組,然后對這個有序數組進行取值操作就可以了。
特別注意:轉換之后的數組有可能會存在重復的節點,此時的話,我們就需要對數組進行去重的操作。
題目1:二叉樹中第二小的節點
代碼實現:
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */func findSecondMinimumValue(root *TreeNode) int { res := midOrder(root) m := make(map[int]int) for _,v:=range res { m[v] = v } resp := []int{} for _,v:=range m { resp = append(resp,v) } if len(resp)>=2{ sort.Ints(resp) return resp[1] } return -1}func midOrder(root *TreeNode) (res []int) { if root == nil { return } res = append(res,midOrder(root.Left)...) res = append(res,root.Val) res = append(res,midOrder(root.Right)...) return}
題目2:二叉搜索樹中第K小的元素
代碼實現:
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */func kthSmallest(root *TreeNode, k int) int { if root == nil { return 0 } res := midOrder(root) if k > len(res) { return 0 } return res[k-1]}func midOrder(root *TreeNode) []int { if root == nil { return nil } res := []int{} res = append(res,midOrder(root.Left)...) res = append(res,root.Val) res = append(res,midOrder(root.Right)...) return res }
感謝各位的閱讀,以上就是“c++怎么計算二叉搜索樹中第K小的元素”的內容了,經過本文的學習后,相信大家對c++怎么計算二叉搜索樹中第K小的元素這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。