一、
二叉树的构建及遍历
作业内容
二叉树的构建及遍历。
描述
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。
输入描述:
输入包括1行字符串,长度不超过100。
输出描述:
可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。
示例1
输入:
abc##de#g##f###
输出:
c b e g d f a
#include <stdio.h>
#include <stdlib.h>
typedef struct BinaryTreeNode
{
char data;
struct BinaryTreeNode* left;
struct BinaryTreeNode* right;
}BTN;
BTN* CreatTree(char*a,int*i)
{
if(a[(*i)]=='#')
{
(*i)++;
return NULL;
}
BTN*NewNode=(BTN*)malloc(sizeof(BTN));
NewNode->data=a[(*i)++];
NewNode->left=CreatTree(a,i);
NewNode->right=CreatTree(a,i);
return NewNode;
}
void InOrder(BTN*tree)
{
if(tree==NULL)
{
return ;
}
InOrder(tree->left);
printf("%c ",tree->data);
InOrder(tree->right);
}
int main()
{
char a[100]; //创建数组
scanf("%s",a);
int i=0;
BTN* tree=CreatTree(a,&i); //按前序遍历将数组读入二叉树
InOrder(tree); //中序遍历输出
return 0;
}
二、
作业标题
二叉树的后序遍历
作业内容
二叉树的后序遍历 。
给你一棵二叉树的根节点 root
,返回其节点值的 后序遍历 。
示例 1:
输入:root = [1,null,2,3] 输出:[3,2,1]
示例 2:
输入:root = [] 输出:[]
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int treesize (struct TreeNode *root)
{
if(root==NULL)
{
return 0;
}
return root==NULL?0:treesize(root->left) + treesize(root->right)+1;
}
void Postorder(struct TreeNode *root,int *numberdata,int*i)
{
if(root==NULL)
{
return ;
}
Postorder(root->left,numberdata,i);
Postorder(root->right,numberdata,i);
numberdata[(*i)++]=root->val;
}
int *postorderTraversal(struct TreeNode *root, int *returnSize)
{
int n=treesize(root); //计算根节点数量
*returnSize=n;
int*numberdata=(int*)malloc(sizeof(int)*n);
int i=0;
Postorder(root,numberdata,&i); //后序遍历
return numberdata;
}
三、
作业标题
二叉树中序遍历
作业内容
二叉树中序遍历 。
给定一个二叉树的根节点 root
,返回节点值的 中序遍历 。
示例 1:
输入:root = [1,null,2,3] 输出:[1,3,2]
示例 2:
输入:root = [] 输出:[]
int treesize (struct TreeNode *root)
{
if(root==NULL)
{
return 0;
}
return root==NULL?0:treesize(root->left) + treesize(root->right)+1;
}
void Inorder(struct TreeNode *root,int *numberdata,int*i)
{
if(root==NULL)
{
return ;
}
Inorder(root->left,numberdata,i);
numberdata[(*i)++]=root->val;
Inorder(root->right,numberdata,i);
}
int* inorderTraversal(struct TreeNode* root, int* returnSize)
{
int n=treesize(root);
*returnSize=n;
int*numberdata=(int*)malloc(sizeof(int)*n);
int i=0;
Inorder(root,numberdata,&i);
return numberdata;
}