二叉树的建立VS2019运行cpp
前言
本篇文章是从作者一个小白的思路写的,主要是记录自己在建立二叉树的过程中遇到的各种问题,以及解决思路,参考多篇文章,绝非原创,网络世界真精彩,谢谢各位大佬们,求生欲Max。
递归法建立二叉树详解
1 首先解决二叉树是由什么构成的呢
struct node{
char data;
struct node*left;
struct node *right;
}
二叉树是由一个一个结点连接而成的,> 二叉树特点是每个结点最多只能有两棵子树,且有左右之分,所以这里首先定义了一个结构体,其中包含数据域和指针域(分别指向左指针和右指针)两个内容。
2 其次解决二叉树的存储问题
1) 在这里我选择,二叉链表存储结构
二叉链表中每个结点包括3个域:数据域、左指针域、右指针域
typedef struct BiTreeNode{
Datatype data;
struct BiTreeNode *lchild,*rchild;
}BiTreeNode,*BiTree
2)递归构造
void CreatTree(TreeNode*& T)
{
char data;
cin >> data;
if (data == '#')
T = NULL;
else
{
T = new TreeNode;
T->a = data;
CreatTree(T->left);
//在这里我想解释一下,先建立左结点建立完以后,跳出循环,执行完这个语句以后,再执行下一条,呜呜,我当时以为成死循环了,一直没看懂
CreatTree(T->right);
}
}
3前序、中序、后序遍历
1)前序遍历二叉树
void PreorderTree(TreeNode* T)//前序遍历二叉树
{
if (T == NULL)
return;
cout << T->a << " ";
PreorderTree(T->left);
PreorderTree(T->right);
}
------------|
2)中序遍历二叉树
void InorderTree(TreeNode* T)//中序遍历二叉树
{
if (T == NULL)
return;
PostorderTree(T->left);
cout << T->a << " ";
InorderTree(T->right);
3)后序遍历二叉树
void PostorderTree(TreeNode* T)//后序遍历二叉树
{
if (T == NULL)
return;
PostorderTree(T->left);
PostorderTree(T->right);
cout << T->a << " ";
}
4完整代码
#include<iostream>
typedef struct TreeNode
{
char a;
struct TreeNode *left;
struct TreeNode* right;
}Tree;
using namespace std;
void CreatTree(TreeNode*& T);
void PreorderTree(TreeNode* T);
void InorderTree(TreeNode* T);
void PostorderTree(TreeNode* T);
using namespace std;
int main()
{
cout << "请输入先序创建二叉树的序列:" << endl;
Tree* T;
CreatTree(T);
cout << "前序遍历的结果为:";
PreorderTree(T);
cout << "中序遍历的结果为:" << endl;
InorderTree(T);
cout << endl;
cout << "后序遍历的结果为:";
PostorderTree(T);
return 0;
}
void CreatTree(TreeNode*& T)
{
char data;
cin >> data;
if (data == '#')
T = NULL;
else
{
T = new TreeNode;
T->a = data;
CreatTree(T->left);
CreatTree(T->right);
}
}
void PreorderTree(TreeNode* T)//前序遍历二叉树
{
if (T == NULL)
return;
cout << T->a << " ";
PreorderTree(T->left);
PreorderTree(T->right);
}
void InorderTree(TreeNode* T)//中序遍历二叉树
{
if (T == NULL)
return;
PostorderTree(T->left);
cout << T->a << " ";
InorderTree(T->right);
}
void PostorderTree(TreeNode* T)//后序遍历二叉树
{
if (T == NULL)
return;
PostorderTree(T->left);
PostorderTree(T->right);
cout << T->a << " ";
}