演算法筆記之二叉查詢樹(BST)

2021-09-02 01:39:28 字數 3138 閱讀 2898

// 樹的結構體

struct nodenode;

// 查詢二叉樹的一系列操作

// 查詢

node* findelement(node * root, int x)

else if(root->number > x)

else}

// 插入,注意形參裡面的引用

bool insertelement(node* &root, int x)

if(root->number == x)

else if(root->number > x)

else

}

對bst中序遍歷可以得到乙個有序陣列,由bst的性值可以看出。

//  分別為前序,中序,後序遍歷 

如果要刪除根節點50 ,那麼其替代節點必需合適,能滿足bst的定義,可以用23號節點(左子樹最大的節點),54號節點(右子樹最小節點)。

//尋找最大值 

node* findmax(node* root)

return root;

}//尋找最小值

node* findmin(node* root)

return root;

}// 刪除元素

void deleteelement(node* &root, int x)

// 節點左子樹存在,則找左子樹的最大值來替代

else if(root->lchild != null)

// 節點右子樹存在,則找右子樹的最小值來替代

else if(root->rchild != null)

} else if(root->number > x)

else

}

問題 a: 二叉排序樹

/* 查詢二叉樹的一系列基本操作 */

// 查詢

node* findelement(node * root, int x)

else if(root->number > x)

else}

// 插入,注意形參裡面的引用

bool insertelement(node* &root, int x)

if(root->number == x)

else if(root->number > x)

else}

// 前中後次序遍歷

void preorder(node* root)}

void inorder(node* root)}

void postorder(node* root)}

// 刪除結點, 要先引入兩個尋找結點前驅和後繼

node* findpre(node* root)

return now;}

node* findpost(node* root)

return now;}

void deleteelement(node* &root, int x)

else if(root->lchild != null)

else

}else if(root->number > x)

else}

int main()

preorder(root); // 前序

printf("\n");

inorder(root); // 中序

printf("\n");

postorder(root); // 後序

printf("\n");

}return 0;

}

1043 is it a binary search tree (25 分)

注意:其中對mbst遍歷的處理,如其中序遍歷為依次遍歷右子樹,根節點,左子樹。還有就是可以直接比較兩個vector是否相等。

#include#include#include#includeusing namespace std;

//記錄bst的前序,後序,映象bst的前序,後序

vectorpreorder, preorderm, origin, postorder, postorderm;

struct nodenode;

// 插入結點

bool insertelement(node* &root, int x)

else if(root->number > x)

else

}//bst和映象bst的前序,注意映象bst要交換左右子樹

void preorderbst(node* root)

}void preordermbst(node* root)

}//bst和映象bst和後序遍歷

void postorderbst(node* root)

};void postordermbst(node* root)

}int main()

//分別對bst和映象bst進行前序,後序遍歷

preorderbst(root);

preordermbst(root);

postorderbst(root);

postordermbst(root);

if(origin == preorder)

} else if(origin == preorderm)

} else

return 0;

}

演算法筆記9 4 二叉查詢樹 BST

search函式查詢二叉查詢樹中資料域為x的結點 插入乙個資料域為x的新結點 注意引數root要加引用 void insert node root,int x if x root data return 結點已經存在 不需要插入 二叉查詢樹元素一定不會重複 else if xdata insert ...

二叉查詢樹 BST

當所有的靜態查詢結構新增和刪除乙個資料的時候,整個結構都需要重建。這對於常常需要在查詢過程中動態改變資料而言,是災難性的。因此人們就必須去尋找高效的動態查詢結構,我們在這討論乙個非常常用的動態查詢樹 二叉查詢樹。二叉查詢樹的特點 下面的圖就是兩棵二叉查詢樹,我們可以總結一下他的特點 1 若它的左子樹...

二叉查詢樹(BST)

二叉查詢樹,也稱為二叉排序樹,二叉搜尋樹。二叉查詢樹結合了鍊錶插入的靈活性和有序陣列查詢 二分查詢 的高效性。用二叉查詢樹實現有序符號表的api。public class bst,value 有序符號表的相關方法 public intsize private intsize node x publi...