C语言二叉树建立及前序、中序、后序遍历,叶子节点,深度

struct BiTNode {
int val;
struct BiTNode* lchild;
struct BiTNode* rchild;
};
//树的构建 思路递归方法
struct BiTNode* Create()
{
int val;
scanf_s("%d", &val);
struct BiTNode* root = (struct BiTNode*)malloc(sizeof(struct BiTNode));
if (val<0)
{
return NULL;
}
if(val>0)
{
root->val = val;
root->lchild = Create();
root->rchild = Create();
}
return root;
}
//前序遍历
void PreeOrderTraversal(struct BiTNode* root)
{
if (rootNULL)
{
return;
}
printf("%d\n", root->val);
PreeOrderTraversal(root->lchild);
PreeOrderTraversal(root->rchild);
}
//中序遍历
void InOrderTraversal(struct BiTNode* root)
{
if (root == NULL)
{
return;
}
InOrderTraversal(root->lchild);
printf("%d\n", root->val);
InOrderTraversal(root->rchild);
}
// 后序遍历
void PostOrderTraversal(struct BiTNode* root)
{
if (root
NULL)
{
return;
}
PostOrderTraversal(root->lchild);
PostOrderTraversal(root->rchild);
printf("%d\n", root->val);
}
//树的深度
int MaxDepth(struct BiTNode* root)
{
if (rootNULL)
{
return 0;
}
else
{
int maxLeft = MaxDepth(root->lchild);
int maxRight = MaxDepth(root->rchild);
if (maxLeft>maxRight)
{
return 1 + maxLeft;
}
else
{
return 1 + maxRight;
}
}
}
//叶子节点
int LeafNodeNum(struct BiTNode* root)
{
if (root
NULL)
{
return 0;
}
if (root->lchildNULL&&root->rchildNULL)
{
return 1;
}
else
{
return LeafNodeNum(root->lchild) + LeafNodeNum(root->rchild);
}
}
test 代码:
int main()
{
struct BiTNode* root = Create();
printf(“前序遍历\n”);
PreeOrderTraversal(root);
printf(“中序遍历\n”);
InOrderTraversal(root);
printf(“后序遍历\n”);
PostOrderTraversal(root);
printf(“树的深度为:%d \n”,MaxDepth(root));
printf(“叶子节点为:%d\n”,LeafNodeNum(root));
return 0;
}
C语言二叉树建立及前序、中序、后序遍历,叶子节点,深度