#define MAXSIZE 100 // 树中结点个数的最大值 typedef char datatype; // 结点值的类型 // 结点的类型 typedef struct node { datatype data; int parent; // 结点双亲的下标 } node; // 树的类型 typedef struct tree { node treelist[MAXSIZE]; // 存放结点的数组 int length, root; // 树中实际所含结点的个数及根节点的位置 } tree;
前序遍历:首先访问根结点,再从左到右依次按前序遍历的方式访问根结点的每一棵子树node
后序遍历:首先按后序遍历的方式访问根结点的每一棵子树,而后再访问根结点算法
层序遍历:首先访问第一层上的根结点,而后从左到右依次访问第二层上的全部结点,……,最后访问树中最低一层的全部结点。数组
图树的遍历:spa
树的遍历经常使用操做:设计
经常使用操做:code
图树的括号表示:blog
经常使用操做:递归
图树的层号表示:class
树最适合用来表示具备有序性和层次性的数据基础
在选择存储结构时,既要考虑数据值自己的存储,还须要考虑数据间关系的存储
(真题)对于一颗具备 \(n\) 个结点的树,该树中全部结点的度数之和为 \(n-1\)
已知一棵度为 \(m\) 的树中有 \(n_1\) 个度为 \(1\) 的结点, \(n_2\) 个度为 \(2\) 的结点,……,\(n_m\) 个度为
\(m\) 的结点,问该树中有多少个叶子结点?
树中结点总数 \(n=n_0+n_1+n_2+…+n_m\)
树中结点的度数之和为 \(n-1\),且有:\(n-1=n_1+2*n_2+3*n_3+\cdots+m*n_m\) (用上题 \(3\) 的定理)
因此叶子结点个数为:\(n_0=1+n_2+2*n_3+\cdots+(m-1)*n_m\)