树的定义
树状图是一种数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
typedef struct BTree //二叉树
{
int val;
struct BTree* rigth;
struct BTree* left;
}BTree, *BTreePtr;
树的创建与销毁
利用递归算法,可以方便的创建和销毁一棵树.
TreeNode* CreateTree()
{
int input = 0;
scanf_s("%d", &input);
TreeNode* t;
if (input != 0)
{
t = (TreeNode*)malloc(sizeof(TreeNode));
t->val = input;
printf("\n%d的左孩子:\n", t->val);
t->left = CreateTree();
printf("\n%d的有孩子:\n", t->val);
t->left = CreateTree();
}
else
{
return NULL;
}
return t;
}
void DestroyBTree(BTree* t)
{
if (!t)
return;
BTree* left = t->left;
BTree* rigth = t->rigth;
free(t);
t = NULL;
DestroyBTree(left);
DestroyBTree(rigth);
}
树的遍历
先序遍历(Preorder)
根节点->左子节点->右子节点。
void PreorderTraverseBTree(BTree* tree)
{
if (!tree)
return;
printf("%d\t", tree->val);
PreorderTraverseBTree(tree->left);
PreorderTraverseBTree(tree->rigth);
}
中序遍历(Inorder)
左子节点->根节点->右子节点
void inorderBTree(BTree* tree)
{
//递归出口
if (!tree)
return;
inorderBTree(tree->left);
printf("%d\t", tree->val);
inorderBTree(tree->rigth);
}
后序遍历(Postorder)
左子节点->右子节点->根节点
void postorderBTree(BTree* tree)
{
if (!tree)
return;
postorderBTree(tree->left);
postorderBTree(tree->rigth);
printf("%d\t", tree->val);
}
参考资料百度百科