優點:通過下標查詢查詢速度快、對有序陣列可以通過二分查詢提高速度
缺點:如果檢索某個具體的值或者插入元素,會整體移動效率低
優點:插入效率高
缺點:檢索時需要遍歷所有節點查詢
既保持了類似鍊錶結構的插入效率,又保持了查詢的效率,查詢的特點很類似於陣列的二分查詢,比如二叉樹:每個節點都一分為二,父節點相當於中間值,子節點相當於左右的值;
二叉樹遍歷分為前序、中序、後序遍歷:
前序遍歷:先輸出父節點再遍歷左子樹和右子樹
中序遍歷:先遍歷左子樹,再輸出父節點,再遍歷右子樹
後續遍歷:先遍歷左子樹,再遍歷右子樹,最後輸出父節點
//定義binarytree 二叉樹
class
binarytree
//刪除結點
public
void
delnode
(int no)
else
}else
}//前序遍歷
public
void
preorder()
else
}//中序遍歷
public
void
infixorder()
else
}//後序遍歷
public
void
postorder()
else
}//前序遍歷
public heronode preordersearch
(int no)
else
}//中序遍歷
public heronode infixordersearch
(int no)
else
}//後序遍歷
public heronode postordersearch
(int no)
else}}
//先建立heronode 結點
class
heronode
public
intgetno()
public
void
setno
(int no)
public string getname()
public
void
setname
(string name)
public heronode getleft()
public
void
setleft
(heronode left)
public heronode getright()
public
void
setright
(heronode right)
@override
public string tostring()
//遞迴刪除結點
//1.如果刪除的節點是葉子節點,則刪除該節點
//2.如果刪除的節點是非葉子節點,則刪除該子樹
public
void
delnode
(int no)
//3.如果當前結點的右子結點不為空,並且右子結點 就是要刪除結點,就將this.right= null ;並且就返回(結束遞迴刪除)if(
this
.right != null &&
this
.right.no == no)
//4.我們就需要向左子樹進行遞迴刪除if(
this
.left != null)
//5.則應當向右子樹進行遞迴刪除if(
this
.right != null)
}//編寫前序遍歷的方法
public
void
preorder()
//遞迴向右子樹前序遍歷if(
this
.right != null)
}//中序遍歷
public
void
infixorder()
//輸出父結點
system.out.
println
(this);
//遞迴向右子樹中序遍歷if(
this
.right != null)
}//後序遍歷
public
void
postorder()
if(this
.right != null)
system.out.
println
(this);
}//前序遍歷查詢
/** *
* @param no 查詢no
* @return 如果找到就返回該node ,如果沒有找到返回 null
*/public heronode preordersearch
(int no)
//1.則判斷當前結點的左子節點是否為空,如果不為空,則遞迴前序查詢
//2.如果左遞迴前序查詢,找到結點,則返回
heronode resnode = null;if(
this
.left != null)
if(resnode != null)
//1.左遞迴前序查詢,找到結點,則返回,否繼續判斷,
//2.當前的結點的右子節點是否為空,如果不空,則繼續向右遞迴前序查詢if(
this
.right != null)
return resnode;
}//中序遍歷查詢
public heronode infixordersearch
(int no)
if(resnode != null)
system.out.
println
("進入中序查詢");
//如果找到,則返回,如果沒有找到,就和當前結點比較,如果是則返回當前結點if(
this
.no == no)
//否則繼續進行右遞迴的中序查詢if(
this
.right != null)
return resnode;
}//後序遍歷查詢
public heronode postordersearch
(int no)
if(resnode != null)
//如果左子樹沒有找到,則向右子樹遞迴進行後序遍歷查詢if(
this
.right != null)
if(resnode != null)
system.out.
println
("進入後序查詢");
//如果左右子樹都沒有找到,就比較當前結點是不是if(
this
.no == no)
return resnode;
}}
資料結構 二叉樹結構
資料結構 二叉樹結構 定義 一棵二叉查詢樹 bst 是一棵二叉樹,其中每個結點都含有乙個comparable的鍵 以及相關聯的值 且每個結點的鍵都大於其左子樹中的任意結點的鍵而小於右子樹的任意結點的鍵。完全二叉樹 將結點按從左到右,再從上到下的順序排布,得到的二叉樹就是完全二叉樹。例如有10個結點,...
資料結構 樹結構 二叉樹 完全二叉樹 滿二叉樹
樹結構是一種描述非線性層次關係的資料結構。除根結點外,其餘每個結點有且僅有乙個直接前驅。每個結點可以有任意多個直接後繼。英文名詞表示 tree,root,node,leaf,edge,child,subtree 要麼二叉樹沒有根結點,是一棵空樹。要麼二叉樹由根結點,左子樹,右子樹組成,且左子樹和右子...
樹結構 二叉樹
二叉樹 如果書中的每個節點最多只有兩個子節點,這樣的樹就叫做二叉樹 1.二叉樹的重要特性 二叉樹第 i 層的最大節點數為 2 i 1 i 1 深度為 k 的二叉樹最大節點總數為 2 k 1 對於任何乙個非空二叉樹t,若n0表示葉節點的個數,n2為度為2的非空葉節點個數,那麼兩者滿足 n0 n2 1 ...