二叉树建立
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int DataT;
//建立二叉树节点的结构体
typedef struct BinaryTreeNode
{
DataT val;
struct BinaryTreeNode* right;
struct BinaryTreeNode* left;
}BinaryTreeNode;
//前序遍历
void PrevOrder(BinaryTreeNode* root);
//中序遍历
void MidOrder(BinaryTreeNode* root);
//后序遍历
void PostOrder(BinaryTreeNode* root);
//节点个数(方法一)
void TreeSize(BinaryTreeNode*root,int *psize);
//节点个数(方法二)
int TreeSize1(BinaryTreeNode* root);
//叶子节点个数
int TreeLeafSize(BinaryTreeNode* root);
//开辟节点空间
BinaryTreeNode* CreatNode(int x)
{
BinaryTreeNode* Node = (BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
Node->val = x;
Node->left = NULL;
Node->right = NULL;
return Node;
}
前序遍历
void PrevOrder(BinaryTreeNode* root)
{
if (root == NULL)
{
//‘#’代表NULL;下同
printf("# ");
return;
}
printf("%c ",root->val);
PrevOrder(root->left);
PrevOrder(root->right);
}
中序遍历
void MidOrder(BinaryTreeNode* root)
{
if (root == NULL)
{
printf("# ");
return;
}
MidOrder(root->left);
printf("%c ", root->val);
MidOrder(root->right);
}
后序遍历
void PostOrder(BinaryTreeNode* root)
{
if (root == NULL)
{
printf("# ");
return;
}
PostOrder(root->left);
PostOrder(root->right);
printf("%c ", root->val);
}
叶子节点个数
方法一
void TreeSize(BinaryTreeNode* root,int *psize)
{
if (root == NULL)
return;
//int size = 0;
else
(*psize)++;
TreeSize(root->left,psize);
TreeSize(root->right,psize) ;
}
方法二
int TreeSize1(BinaryTreeNode* root)
{
if (root == NULL)
return 0;
else
return TreeSize1(root->left) + TreeSize1(root->right)+1;
}
叶子节点个数
int TreeLeafSize(BinaryTreeNode* root)
{
if (root == NULL)
return 0;
if (root->left == NULL && root->right == NULL)
return 1;
return TreeLeafSize(root->left) + TreeLeafSize(root->right);
}
我的测试
void test1()
{
BinaryTreeNode* A = CreatNode('A');
BinaryTreeNode* B = CreatNode('B');
BinaryTreeNode* C = CreatNode('C');
BinaryTreeNode* D = CreatNode('D');
BinaryTreeNode* E = CreatNode('E');
A->left = B;
A->right = C;
B->left = D;
B->right = E;
PrevOrder(A);printf("\n");
MidOrder(A);printf("\n");
PostOrder(A); printf("\n");
int size = 0;
TreeSize(A, &size);
printf("TreeSize:%d\n",size);
printf("TreeSize1:%d\n", TreeSize1(A));
printf("TreeLeafSize:%d\n", TreeLeafSize(A));
}
int main()
{
test1();
return 0;
}