树的高度:
当只有一个根节点的时候,高度就是0。
//计算树的高度
int depth(Node node)
{
if(node == NULL)
return -1;
int l = depth(node->left);
int r = depth(node->right);
return (l < r)?(r+1):(l+1);//当只有一个根节点的时候,高度就是-1+1=0
}
层数:
树的高度最底下的为第1层(有的书定义为第0层),依次向上累加
树的深度:
完全二叉树是指这样的二叉树:除最后一层外,每一层上的结点数均达到最大值;在最后一层上只连续缺少右边的若干结点。
具有n 个结点的完全二叉树的深度为[log2n]+1
例:一棵完全二叉树共有64个结点 ,深度为[log2(2^6)]+1=7
总结:树的深度是和节点的个数有关,树的深度是log以2为底,节点的个数n为顶,然后得到的结果再加1的值。
层数:
树的深度最顶的为第1层(有的书定义为第0层),依次向下累加
//总结:
引自考研大纲解析38页:树的深度是从根节点开始(其深度为1)自顶向下逐层累加的,而高度是从叶节点开始(其高度为1)自底向上逐层累加的。虽然树的深度和高度一样,但是具体到树的某个节点,其深度和高度是不一样的。
我的理解是:非根非叶结点的深度是从根节点数到它的,高度是从叶节点数到它的。
第i层有2^(i-1)个节点
根节点层数是0,树的层数和深度一样,高度为层数+1.层数也就是该结点到根结点的路径长度
假如有3层,那么最后一层节点的个数是2的2次方为4,那么总层数为2的3次方减1,得到7个
------------------下面是三种遍历方式----------------------------------------------------
先序遍历:
先序遍历就是根节点第一个遍历到,然后再遍历左节点,然后再遍历右节点,并且左边的不递归的遍历完之后,是不会遍历右边的结点的
A->B->C->D->E->G->F
中序遍历:
中序遍历就是根节点第二遍历到,也就是说,先遍历左节点,再遍历中间的根节点,再遍历右边的结点
C->B->E->G->D->F->A
后序遍历:
后序遍历就是根节点最后遍历到,也就是说,先遍历左节点,再遍历右节点,最后遍历根节点
C->G->E->F->D->B->A
层次遍历:
层次遍历就是一层一层的遍历
A->B->C->D->E->F->G