果然這些資料結構還是要自己寫一遍才熟悉啊。。。這次也是加深了我對指標的認識,以前都不怎麼注意的
二叉查詢樹,每乙個節點有左右兒子,然後這個節點的值大於左兒子,小於右兒子,那麼根據定義不難得出**,先配個圖以便於理解(網上也有不少)~
二叉查詢樹一共有三種操作:查詢,刪除,插入
結點結構體:
struct node
;
插入:按照定義通過遞迴插入
node* node_insert(int x,node *root) //這裡其實也可以直接引用傳入位址編輯
else if(x>root->key)root->rchild = node_insert(x,root->rchild);
else root->lchild = node_insert(x,root->lchild);
//return root;
}
查詢:按照定義遞迴查詢,小於節點往左走,否則往右,直到找到節點或者到達乙個空節點
bool node_search(int key,node* root)
刪除:刪除操作需要特判一下,如果刪除的節點沒有子節點的話,直接刪除,如果只有左節點或者只有右節點的話可以刪除之後用子節點代替當前節點,如果是左右節點都有的話,就要判斷一下右節點的左子樹是否為空,如果為空的話把當前節點的右節點替換到當前節點,然後刪除之後的節點原來的左節點變為新的根節點的左節點(這裡可能表述的有點亂),若不為空,則繼續查詢右節點的左子樹,直到為空
int node_delete_search(int key,node *&root)
else return node_delete_search(key,root->rchild);
}void node_delete(int key,node *&root)
} else
}
模板 判斷二叉查詢樹
二叉查詢樹其實!就是平衡樹啦 二叉查詢樹 二叉查詢樹具有如下性質 每個節點的值都大於其左子樹上所有節點的 值 小於其右子樹上所有節點的值。試判斷一棵樹是否為二叉查詢樹。輸入的第一行包含乙個整數 n,表示這棵樹有 n 個頂點,編號分別為 1,2,n,其 中編號為 1 的為根結點。之後的第 i 行有三個...
二叉樹 二叉查詢樹
構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 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 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...