树及二叉树的定义与前中后序遍历

树的定义:

树(Tree)是n(n >= 0)个结点的有限集,它或为空树(n = 0);或为非空树,对于非空树T:

1.有且仅有一个根节点。

2.除根节点以外的其余节点可以分为m (m > 0)个互不相交的有限集 T1,T2,T3,...,Tm,其中每一个集合本身又是一棵树,并且称为根的子树。

 

 

树的一些基本名词,术语:

根:根节点,没有直接前驱

叶子:终端节点,没有后继

森林:m棵不相交的树的集合

节点:树的数据元素

节点的度:节点挂接的子树数

节点的层次:从根节点到该节点的层数

树的度:所有节点度中的最大值

树的深度:所有节点中最大的层数(也称为树的高度)

二叉树定义:

二叉树(binary tree)是 n (n >= 0) 个节点所构成的集合,它或为空树 (n = 0);或为非空树,对于非空树T:

1.有且仅有一个根节点。<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的C语言程,实现了二叉树的创建和: ```c #include <stdio.h> #include <stdlib.h> // 定义叉树节点结构体 struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; }; // 创建二叉树 struct TreeNode* createTree() { int val; scanf("%d", &val); if (val == -1) { return NULL; } struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode)); node->val = val; node->left = createTree(); node->right = createTree(); return node; } // void preorderTraversal(struct TreeNode* root) { if (!root) { return; } printf("%d ", root->val); preorderTraversal(root->left); preorderTraversal(root->right); } // void inorderTraversal(struct TreeNode* root) { if (!root) { return; } inorderTraversal(root->left); printf("%d ", root->val); inorderTraversal(root->right); } // 后 void postorderTraversal(struct TreeNode* root) { if (!root) { return; } postorderTraversal(root->left); postorderTraversal(root->right); printf("%d ", root->val); } int main() { struct TreeNode* root = createTree(); printf(":"); preorderTraversal(root); printf("\n:"); inorderTraversal(root); printf("\n后:"); postorderTraversal(root); printf("\n"); return 0; } ``` 在程,我们定义了一个二叉树节点的结构体,包括节点的值,以及左右子节点。然后我们通过递归的方式来创建二叉树,递归函数返回的是当节点。 在遍叉树时,分别实现了和后的函数。这些函数也都是通过递归来实现的。在遍过程,先输出当节点的值,然后遍左子树,最后遍右子树();或者先遍左子树,然后输出当节点的值,最后遍右子树();或者先遍左子树,然后遍右子树,最后输出当节点的值(后)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值