#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 解釋 輸入為 ...