二叉樹學習筆記

2021-09-01 22:20:02 字數 1363 閱讀 7681

/*

* 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 採用先序遍歷...

學習筆記 樹 二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。本題主要採用遞迴的思想。首先介紹一下根據前序遍歷和中序遍歷來構建二叉樹的思路 前序遍歷的第乙個則是二叉樹的根,找到根在中序遍歷中的位...