树的高度,深度,层数和三种遍历方式

树的高度:

当只有一个根节点的时候,高度就是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

树的高度,深度,层数和三种遍历方式_第1张图片

 

总结:树的深度是和节点的个数有关,树的深度是log以2为底,节点的个数n为顶,然后得到的结果再加1的值。

层数:

树的深度最顶的为第1层(有的书定义为第0层),依次向下累加

 

//总结:

引自考研大纲解析38页:树的深度是从根节点开始(其深度为1)自顶向下逐层累加的,而高度是从叶节点开始(其高度为1)自底向上逐层累加的。虽然树的深度和高度一样,但是具体到树的某个节点,其深度和高度是不一样的。

我的理解是:非根非叶结点的深度是从根节点数到它的,高度是从叶节点数到它的。

第i层有2^(i-1)个节点

 

根节点层数是0,树的层数和深度一样,高度为层数+1.层数也就是该结点到根结点的路径长度

假如有3层,那么最后一层节点的个数是2的2次方为4,那么总层数为2的3次方减1,得到7个

------------------下面是三种遍历方式----------------------------------------------------

   树的高度,深度,层数和三种遍历方式_第2张图片

先序遍历:

先序遍历就是根节点第一个遍历到,然后再遍历左节点,然后再遍历右节点,并且左边的不递归的遍历完之后,是不会遍历右边的结点的

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

     

 

你可能感兴趣的:(树的高度,深度,层数和三种遍历方式)