为了看看二叉树重建,复习了一下二叉树(指针实现)
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <stack>
#include <queue>
#define flush(arr,i) memset(arr,i,sizeof(arr))
typedef long long int64;
using namespace std;
const int maxn=10010;
int n;
struct BinaryTreeNode
{
int data;
BinaryTreeNode *l_child, *r_child;
BinaryTreeNode(int val)
{
data = val;
l_child = r_child = nullptr;
}
};
BinaryTreeNode *root;
queue<BinaryTreeNode*> Q;
//随便建了一个完全二叉树
void InitBinaryTree(int d)
{
int cnt = pow(2, d) - 1, cur = 1;
root = new BinaryTreeNode(1);
Q.push(root);
while(!Q.empty())
{
BinaryTreeNode *p = Q.front();
Q.pop();
p->l_child = new BinaryTreeNode( (p->data) * 2);
p->r_child = new BinaryTreeNode( (p->data) * 2 + 1);
Q.push(p->l_child);
Q.push(p->r_child);
cur += 2;
if(cur == cnt)
break;
}
}
//广搜
void BfsSearch(BinaryTreeNode *root)
{
while(!Q.empty())
Q.pop();
Q.push(root);
while(!Q.empty())
{
BinaryTreeNode *cur = Q.front();
Q.pop();
if(cur)
{
printf("%d ", cur->data);
Q.push(cur->l_child);
Q.push(cur->r_child);
}
}
}
//先序
void PreRootSearch(BinaryTreeNode *root)
{
if(root != nullptr)
{
printf("%d ", root->data);
PreRootSearch(root->l_child);
PreRootSearch(root->r_child);
}
}
//后序
void LastRootSearch(BinaryTreeNode *root)
{
if(root != nullptr)
{
PreRootSearch(root->l_child);
PreRootSearch(root->r_child);
printf("%d ", root->data);
}
}
//中序
void MidRootSearch(BinaryTreeNode *root)
{
if(root != nullptr)
{
PreRootSearch(root->l_child);
printf("%d ", root->data);
PreRootSearch(root->r_child);
}
}
int main()
{
//freopen("data.txt", "r", stdin);
InitBinaryTree(4);
BfsSearch(root);
printf("\n--------------------------------------\n");
PreRootSearch(root);
printf("\n--------------------------------------\n");
MidRootSearch(root);
printf("\n--------------------------------------\n");
LastRootSearch(root);
printf("\n--------------------------------------\n");
return 0;
}