二叉搜尋樹

2021-07-10 11:10:17 字數 2711 閱讀 6753

#include // 用來計時 gettickcount函式

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

//typedef int int;  // 資料型別定義

// 節點定義

struct node

;// 指標型別

*pnode

typedef struct node* pnode;

// 指標型別節點

typedef struct node node;

// 普通節點

pnode root = null;

void inorder(pnode x);// 中序遍歷

pnode search1(pnode x, int k);

pnode minimum(pnode x);

// 返回最小關鍵字節點

pnode maximum(pnode x);// 返回最大關鍵字節點

pnode successor(pnode x);// 返回給定節點x的後繼

pnode  precursor(pnode x);// 返回給定節點x的前驅

void insert(pnode t, int data);// 插入乙個元素x

void transplant(pnode t, pnode u, pnode v);

void deletenode(pnode t, pnode z); //  刪除乙個節點z

void destroy1(pnode t);

// 摧毀整個二叉搜尋樹

// 中序遍歷

void inorder(pnode x)

else

cout << " ";

}pnode search1(pnode x, int k)

//第二版本不用遞迴,用迴圈

pnode search2(pnode x, int k)

return x;

}// 返回最小關鍵字節點

pnode minimum(pnode x)

return x;

}// 返回最大關鍵字節點

pnode maximum(pnode x)

return x;

}// 返回給定節點x的後繼

pnode successor(pnode x)

return y;

}// 返回給定節點x的前驅

pnode  precursor(pnode x)

return y;

}// 插入乙個元素x

void insert1(pnode

root, int data)

z->parent = y;

if (y == null)

root = z;

// 空樹直接賦值z

else if (z->data < y->data)

y->left = z;

else

y->right = z;

}//非遞迴方法插入節點 

void insert2(pnode q, int x)

while (q->left != p && q->right != p)

else

}else

else}}

return;

}//遞迴方法插入節點 

pnode insert3(pnode root, int x)

else if (x < root->data)

else

return root;

}//  刪除乙個節點z

void transplant(pnode t, pnode u, pnode v)

void deletenode(pnode t, pnode z)

transplant(t, z, y);

y->left = z->left;

y->left->parent = y;

delete z;

}// 摧毀整個二叉搜尋樹

void destroy1(pnode t)

t = null;

}void destroy2(pnode t)

int main()

cout << endl;

// 中序遍歷樹

inorder(root); //排序

cout << endl;

insert2(root, 34);// 插入34

inorder(root);//排序

cout << endl;

cout << (*maximum(root)).data << endl; //返回最大

cout << (*minimum(root)).data << endl; //返回最小

destroy2(root);//摧毀

/**************************/

for (int i = 0; i < 10; i++)

system("pause");

return 0;

}

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...

二叉搜尋樹 修剪二叉搜尋樹

第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...

樹 二叉樹 二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...