/*
* 1.訪問根節點
* 2.在訪問第 l 層時,將 l+1 層的節點按順序儲存到佇列中
* 3. 進入下一層並訪問該層的所有節點
* 4. 重複上述操作直到所有層都訪問完
** 時間複雜度 o(n),空間複雜度o(n),最壞的情況下,最後一層的所有節點可能在佇列中
* */
void
levelorder
(node root)
q.deletequeue()
;}
public
class
binarysearchtree
}public node find
(int data)
return null;
}}
public
void
insert
(int data)
node p = tree;
while
(p!=null)
p = p.right;
}else
p = p.left;}}
}
針對要刪除節點的子節點個數的不同,需要分為3中情況
public
void
delete
(int data)
if(p == null)
return
;// 沒有找到
/* 要刪除的節點有 2 個子節點
*/if(p.left != null && p.right != null)
p.data = minp.data;
p = minp;
pp = minpp;
}/*
刪除節點是葉子節點或者僅有乙個子節點
*/node child;
//p的子節點
if(p.left != null) child = p.left;
else
if(p.right !=null) child = p.right;
else child = null;
if(pp == null) tree = child;
//刪除的是根節點
else
if(pp.left == p) pp.left = child;
else pp.right = child;
}
雜湊表的插入、刪除、查詢的時間複雜度可以到 o(1) 。而二叉查詢樹只有在平衡的情況下,插入、刪除、查詢等的操作時間複雜度才是 o(logn)。
那麼為何還要選擇二叉查詢樹呢?
二叉樹學習筆記
二叉樹是樹的一種特殊結構,也是一種極為重要的樹,二叉樹最重要的操作是遍歷,即按照一定的順序訪問樹中的所有節點,常見的遍歷方式有 對遍歷來說,最容易想到的方式就是遞迴,遞迴 簡單,但是效率不高,需要的棧空間比較大,非遞迴的方法 較為複雜,不過效率較高。遞迴實現 void preordervisit b...
二叉樹學習筆記
二.遞迴解法 三.非遞迴解法 include using namespace std char ch typedef char elemtype typedef struct bitnodebitnode,bitree 先序序列存入 void createbitree bitree t 採用先序遍歷...
學習筆記 樹 二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。本題主要採用遞迴的思想。首先介紹一下根據前序遍歷和中序遍歷來構建二叉樹的思路 前序遍歷的第乙個則是二叉樹的根,找到根在中序遍歷中的位...