#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>
using namespace std;
typedef struct BSTNode
{
char data;
BSTNode *lChild;
BSTNode *rChild;
} * BTree;
// BTree是BSTNode*类型的,本身就是一个指针类型
BTree create_tree();
void pre_traverse(BTree);
void in_traverse(BTree);
void post_traverse(BTree);
int main(void)
{
BTree head = create_tree();
// pre_traverse(head);
// in_traverse(head);
post_traverse(head);
return 0;
}
BTree create_tree()
{
//容易出错的地方是没有左右子树的节点要显示置空
//不然很容易出现野指针的问题,递归会死循环
BTree head = new BSTNode;
head->data = 'A';
BTree b = new BSTNode;
b->data = 'B';
head->lChild = b;
BTree c = new BSTNode;
c->data = 'C';
head->rChild = c;
c->lChild = nullptr;
c->rChild = nullptr;
BTree d = new BSTNode;
d->data = 'D';
b->lChild = d;
d->lChild = nullptr;
d->rChild = nullptr;
BTree f = new BSTNode;
f->data = 'F';
b->rChild = f;
f->lChild = nullptr;
f->rChild = nullptr;
return head;
}
//前序遍历的递归实现
void pre_traverse(BTree head)
{
if (head == nullptr)
{
return;
}
cout << head->data << "\t";
if (head->lChild != nullptr)
{
pre_traverse(head->lChild);
}
if (head->rChild != nullptr)
{
pre_traverse(head->rChild);
}
}
void in_traverse(BTree head)
{
if (head)
{
if (head->lChild)
{
in_traverse(head->lChild);
}
cout << head->data << "\t";
if (head->rChild)
{
in_traverse(head->rChild);
}
}
}
void post_traverse(BTree head)
{
if (head)
{
if (head->lChild)
{
post_traverse(head->lChild);
}
if (head->rChild)
{
post_traverse(head->rChild);
}
cout << head->data << "\t";
}
}
二叉树的遍历
最新推荐文章于 2024-04-28 16:49:26 发布