構建二叉樹

func BuildTreeFromInOrderAndPreOrder(inorder, preorder []int) *NodeTree {
   return BuildTree(preorder, inorder, 0, len(preorder)-1, 0, len(inorder)-1)
}
func BuildTree(preOrder, inOrder []int, prestart, preend, instart, inend int) *NodeTree {
   if instart > inend {
      return nil
   }
   root := &NodeTree{Data: preOrder[prestart]}
   position := FindPosition(inOrder, instart, inend, root.Data)
   if position < 0 {
      return root //這個證明此節點爲葉節點
   }
   //                                                   |        |左子樹節點數     |
   root.Left = BuildTree(preOrder, inOrder, prestart+1, prestart+position-instart, instart, position-1)
   //                                                 |右子樹節點個數,值爲負|當前樹總結點個數|
   root.Right = BuildTree(preOrder, inOrder, position-inend+preend+1, preend, position+1, inend)
   return root
}
func FindPosition(arr []int, start, end int, key int) int {
   for i := start; start < end; i++ {
      if arr[i] == key {
         return i
      }
   }
   return -1
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章