#include<stdio.h>
#include<stdlib.h>
typedef struct TreeNode//二叉树节点声明
{
int value;
TreeNode* left;
TreeNode* right;
}*PtrNode;
void CreatTree(PtrNode *root)//先序建立一个树
{
int tmp;
scanf("%d",&tmp);
if(tmp==-1)
*root=NULL;
else
{
*root=(PtrNode)malloc(sizeof(TreeNode));
(*root)->value=tmp;
printf("请输入左节点:");
CreatTree(&(*root)->left);
printf("请输入右节点:");
CreatTree(&(*root)->right);
}
}
void PreOrder(PtrNode root)//前序遍历
{
if(root==NULL)
return;
printf("%d ",root->value);
PreOrder(root->left);
PreOrder(root->right);
}
void InOrder(PtrNode root)//中序遍历
{
if(root==NULL)
return;
InOrder(root->left);
printf("%d ",root->value);
InOrder(root->right);
}
void PostOrder(PtrNode root)//后序遍历
{
if(root==NULL)
return;
PostOrder(root->left);
PostOrder(root->right);
printf("%d ",root->value);
}
int main()
{
PtrNode root;
CreatTree(&root);
PreOrder(root);
printf("\n");
return 0;
}
再插入一段求二叉树最大深度的代码。
int maxDepth(struct TreeNode* root) {
if(root==NULL)
return 0;
int nleft=0,nright=0;
if(root->left)
nleft=maxDepth(root->left);
if(root->right)
nright=maxDepth(root->right);
return (nleft>=nright)?(nleft+1):(nright+1);
}求二叉树最小深度的代码
int minDepth(struct TreeNode* root) {
if(root==NULL)
return 0;
if(root->left==NULL && root->right==NULL)
return 1;
int nleft=0,nright=0;
nright=minDepth(root->right);
nleft=minDepth(root->left);
if(nright==0)
return 1+nleft;
else if(nleft==0)
return 1+nright;
else
return (nleft>nright)?(nright+1):(nleft+1);
}
本文介绍如何使用C语言创建并实现前序、中序和后序遍历二叉树的方法,同时提供了求二叉树最大深度和最小深度的算法。
981

被折叠的 条评论
为什么被折叠?



