利用结构体定义二叉树轮廓:
typedef struct Tree
{
int data;
Tree* leftChild;
Tree* rightChild;
}tree,*linklist;
创建二叉树:
void createtree(linklist node)
{
int item;
cin >> item;
if(item == '#')
node = nullptr;
else{
node = (linklist)malloc(sizeof(tree));
node->data = item;
createtree(node->leftChild);
createtree(node->rightChild);
}
}
销毁二叉树:
void destroytree(linklist node)
{
if(node != nullptr)
{
destroytree(node->leftChild);
destroytree(node->rightChild);
free(node);
}
}
利用递归方式(DFS)遍历二叉树的三种方法:
//先序遍历
void preOrder(linklist node)
{
if(node != nullptr)
{
cout << node->data << ' ';
preOrder(node->leftChild);
preOrder(node->rightChild);
}
}
//中序遍历
void inOrder(linklist node)
{
if(node != nullptr)
{
inOrder(node->leftChild);
cout << node->data << ' ';
inOrder(node->rightChild);
}
}
//后序遍历
void postOrder(linklist node)
{
if(node != nullptr)
{
postOrder(node->leftChild);
postOrder(node->rightChild);
cout << node->data << ' ';
}
}
利用队列(BFS)遍历二叉树:
//层序遍历
void levelOrder(linklist node)
{
queue<linklist>q;
q.push(node);
linklist bt;
while(!q.empty())
{
bt = q.front();
q.pop();
cout << bt->data << ' ';
if(bt->leftChild != nullptr)
{
q.push(bt->leftChild);
}
if(bt->rightChild != nullptr)
{
q.push(bt->rightChild);
}
}
}