查詢二叉樹的實現

2021-08-29 16:13:06 字數 2239 閱讀 4788

簡介

不了解相關概念可先閱讀 資料結構-樹定義及分類

樹集合了陣列(查詢速度快)和鍊錶(插入、刪除速度快)的優點;

二叉搜尋樹的效率:

樹的大部分操作需要從上至下一層層的查詢樹的節點,對於一棵滿樹,大約有一半的節點處於最底層(最底層節點數 = 其它層節點數的和 + 1),故節點操作大約有一半需要找到最底層節點,大約有四分之一的節點處於倒數第二層,故節點操作大約有四分之一需要找到倒數第二層節點,依此類推;查詢過程中,需要訪問每一層的節點,故只要知道了查詢的層數,就能知道操作所需的時間,如果節點總數為n,層數為l,l=log2(n+1);

如果為查詢操作或刪除操作,被操作的節點可能是是樹的任意節點,故查詢操作或刪除操作的時間複雜度為:1/21log2(n+1) + 1/22log2(n/2+1) + … + 1/2n*1

如果為插入操作,由於每次都在樹的最低層插入新的節點,故插入操作的時間複雜度為:log2(n+1)

總的來說可以認為二叉搜尋樹操作的時間複雜度為為o(logn)

查詢二叉樹:在插入時需要將插入的元素按照一定的順序排列好,否則可能會成為鍊錶結構,就失去了二叉查詢樹的優勢了;

二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹:

(1)若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值;

(2)若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點的值;

(3)左、右子樹也分別為二叉排序樹;

插入1)非遞迴方法插入

public

void

createtree

(list

list)

for(

int i : list)

}/**

* 新增乙個節點;如果該樹中不存在該節點,直接新增;已存在,直接返回對應值的節點;

** @param item

* @return

*/treenode insertnode

(int item)

treenode node = root;

treenode parentnode = node;

//node == null 就是要插入的位置,parentnode就是node的雙親節點

while

(node != null)

else

if(node.item < item)

else

} node =

newtreenode

(item, parentnode)

;//判斷是左節點還是右節點;

if(parentnode.item > item)

else

if(parentnode.item < item)

return node;

}

2)遞迴方法插入

void

insertnoderec

(int item)

insertnoderec

(item, root);}

/** * 遞迴的方法插入

** @param item

*/void

insertnoderec

(int item, treenode parentnode)

else

}else

if(treenode.

getitem()

< item)

else

}else

}

搜尋

1)遞迴的方式

public

void

preodersearch

(treenode node)

log.

e(tag, node.

getitem()

+"");

preodersearch

(node.

getliftchild()

);preodersearch

(node.

getrightchild()

);}

2)非遞迴的方式

public

void

prenotrecsearch

(treenode node)

//取出棧頂的節點(最新加入的)if(

!stack.

isempty()

)}}

二叉樹 二叉樹的查詢

三種查詢方式 前序查詢 中序查詢 後序查詢。前序查詢 比較當前節點,如果是,返回查詢結果。如果不是就向左遞迴查詢,如果左邊沒有就向右邊遞迴查詢。設定no 5,針對該題,前序遍歷共4次。中序遍歷 先向左遞迴查詢,如果左子樹沒有,再比較當前節點,如果仍然不是則向右遍歷查詢。後序遍歷 先向左遞迴查詢,如果...

二叉樹 二叉查詢樹

構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 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 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...