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 }
構建二叉樹
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.