二叉查詢樹

2021-09-27 02:23:29 字數 1492 閱讀 2151

二叉查詢樹@toc

題目:輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。

要求:不能建立任何新的結點,只調整指標的指向。

10/

6 14

/ \ /

4 8 12 16

轉換成雙向鍊錶 4=6=8=10=12=14=16

前提:整數陣列中沒有重複的數字

原理1.任意陣列,建立二叉查詢樹

2.中序遍歷二叉查詢樹

3.遞迴調整節點左右指標

實現

package main

import(

"fmt"

"strconv"

)// 定義二叉樹的節點結構

type bstreenode struct

// 建立乙個二叉樹的節點

func create_new_node(data int) *bstreenode

// 建立二叉樹,或者向二叉樹中插入節點

func buildbinarysearchtree(root **bstreenode, data int) else

} else

}} }

}// 中序遍歷有序二叉樹

func searchbinarytree(root *bstreenode)

searchbinarytree(root.left)

fmt.printf(strconv.itoa(root.value) + " ")

searchbinarytree(root.right)

}// 建立二叉查詢樹

func buildbstree(data_list int) **bstreenode

root := new(bstreenode)

for i := 0; i < len(data_list); i++

return &root

}func treetolinkedlist(root *bstreenode) *bstreenode

func helper(head, tail **bstreenode, root *bstreenode)

helper(head, <, root.left)

helper(&rh, tail, root.right)

if lt != nil else

if rh != nil else

}func runtest(root **bstreenode)

head := treetolinkedlist(*root)

for p := head; p != nil; p = p.right

}func main()

root := buildbstree(val)

searchbinarytree(*root)

fmt.println("")

runtest(root)

fmt.println("")

}

二叉樹 二叉查詢樹

構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...

二叉樹 二叉查詢樹

二叉樹 binary tree 一種樹型結構,每個節點最多擁有兩個節點。如下圖 幾種型別的二叉樹 1.full binary tree 每個節點的孩子數 是 0 或者 2.對高度沒有要求。如下圖 2.perfect binary tree 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...

樹(樹,二叉樹,二叉查詢樹)

1.定義 n n 0 個結點構成的有限集合。當n 0時,稱為空樹 2.對於任一棵非空樹 n 0 它具備以下性質 1 樹中有乙個稱為 根 root 的特殊結點,用 r 表示 2 其餘結點可分為m m 0 個互不相交的有限集t1,t2,其中每個集合本身又是一棵樹,稱為原來樹的子樹。3.樹的一些性質 1 ...