二叉树的构建及遍历二叉树OJ
使用C语言构建二叉树其实只要思路清晰是很简单的
我们这里看一下题目根据题目可以判断,是让我们输入一串字符串然后构建一棵二叉树,最后用中序遍历,那么我们该怎么做呢?
首先我们需要先有一个二叉树的结构
struct BTNode{
int val;
struct BTNode* left;
struct BTNode* right;
};
这样二叉树的结构就构建完成啦
接下来我们看看怎么构建二叉树呢?
**“ABC##DE#G##F###”**这样一串字符串我们需要把他构建成一棵二叉树,#的地方为空
所以这里我们使用一个if的条件判断,通过遍历这个字符串来一个个的将元素插入二叉树。
但是这里我们要注意的是,即使读到字符串中的‘#’我们也要往后遍历这个字符串。
这里我们可以先这样写
if(a[*pi]=='#')
{
(*pi)++;
return NULL;
}
走到后面说明读到了非#那么我们就需要将他插入二叉树中,这里我们需要使用malloc创建一个节点。
BTNode* root = (BTNode*)malloc(sizeof(BTNode)); //这里是创建节点
root->val = a[*pi]; //将数组中的值赋给节点
(*pi)++; //数组元素++
root->left=BinaryTreeCreate(a,pi); //递归建立树
root->right=BinaryTreeCreate(a,pi);
return root;
创建了一个节点,在使用递归的方式将这些节点串起来构建二叉树。
最后这里我们在写一个中序的遍历
BTNode* Inodrder(BTNode* root)
{
if(root==NULL)
return NULL;
Inodrder(root->left);
printf("%c ",root->val);
Inodrder(root->right);
return root;
}
中序遍历就很简单了
这里我们在使用一个main函数将他们串在一起
#include <stdio.h>
#include <stdlib.h>
typedef struct BTNode BTNode;
struct BTNode{
int val;
struct BTNode* left;
struct BTNode* right;
};
BTNode* BinaryTreeCreate(char* a, int* pi)
{
if(a[*pi]=='#')
{
(*pi)++;
return NULL;
}
BTNode* root = (BTNode*)malloc(sizeof(BTNode));
root->val = a[*pi];
(*pi)++;
root->left=BinaryTreeCreate(a,pi);
root->right=BinaryTreeCreate(a,pi);
return root;
}
BTNode* Inodrder(BTNode* root)
{
if(root==NULL)
return NULL;
Inodrder(root->left);
printf("%c ",root->val);
Inodrder(root->right);
return root;
}
int main() {
char arr[100];
scanf("%s",arr);
int i = 0;
BTNode* tree = BinaryTreeCreate(arr,&i);
Inodrder(tree);
return 0;
}
这样我们就轻松的拿下了这个二叉树的建立及遍历。喜喜