#include<iostream>
#include<deque>
#include<stack>
using namespace std;
typedef struct treeNode{
int data;
struct treeNode *pLeft;
struct treeNode *pRight;
}treeNode;
//二叉查找树中增加节点
treeNode * createTree(treeNode *pRoot, int val){
if(pRoot == NULL){
pRoot = (treeNode *)malloc(sizeof(treeNode));
pRoot->data = val;
pRoot->pLeft = NULL;
pRoot->pRight= NULL;
}else{
if(val < pRoot->data){
pRoot->pLeft = createTree(pRoot->pLeft, val);
}else{
pRoot->pRight = createTree(pRoot->pRight, val);
}
}
return pRoot;
}
//创建一个二叉树查找树
treeNode * create(treeNode *pRoot){
for(int i=0; i<20; i++){
int val = rand()%100;
pRoot = createTree(pRoot, val);
}
return pRoot;
}
//中序遍历二叉查找树
void tarverseBST(treeNode *pRoot){
if(pRoot != NULL){
tarverseBST(pRoot->pLeft);
printf("%d\n", pRoot->data);
tarverseBST(pRoot->pRight);
}
}
//求二叉查找树的深度
int binaryTreeDepth(treeNode *pRoot){
if(pRoot == NULL){
return 0;
}
int left = binaryTreeDepth(pRoot->pLeft);
int right = binaryTreeDepth(pRoot->pRight);
return (left > right) ? left+1 : right+1;
}
//广度优先遍历
void BFS(treeNode *pRoot){
if(pRoot == NULL){
return ;
}
deque<treeNode *>queue;
queue.push_back(pRoot);
while(!queue.empty()){
treeNode *pNode = queue.front();
printf("%d\n", pNode->data);
queue.pop_front();
if(pNode->pLeft != NULL){
queue.push_back(pNode->pLeft);
}
if(pNode->pRight != NULL){
queue.push_back(pNode->pRight);
}
}
}
//深度优先遍历
void DFS(treeNode *pRoot){
if(pRoot == NULL){
return;
}
stack<treeNode *> s;
s.push(pRoot);
while(!s.empty()){
treeNode *pNode = s.top();
printf("%d\n", pNode->data);
s.pop();
if(pNode->pRight != NULL){
s.push(pNode->pRight);
}
if(pNode->pLeft != NULL){
s.push(pNode->pLeft);
}
}
}
//求二叉树的镜像树
treeNode *mirrorBST(treeNode *pRoot){
if(pRoot == NULL){
return NULL;
}
deque<treeNode *>queue;
queue.push_back(pRoot);
while(!queue.empty()){
treeNode *pNode = queue.front();
queue.pop_front();
treeNode *pTemp = pNode->pLeft;
pNode->pLeft = pNode->pRight;
pNode->pRight = pTemp;
if(pNode->pLeft != NULL){
queue.push_back(pNode->pLeft);
}
if(pNode->pRight != NULL){
queue.push_back(pNode->pRight);
}
}
return pRoot;
}
int main(){
treeNode *pRoot = NULL;
pRoot = create(pRoot);
tarverseBST(pRoot);
printf("BST depth is : ");
int depth = binaryTreeDepth(pRoot);
printf("%d\n", depth);
printf("bst bfs result is : \n");
BFS(pRoot);
printf("bst dfs result is : \n");
DFS(pRoot);
printf("mirror bst after :\n");
pRoot = mirrorBST(pRoot);
BFS(pRoot);
return 0;
}
C语言 二叉查找树相关算法
最新推荐文章于 2021-07-21 19:19:46 发布