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

树的高度:

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

时间: 2024-09-30 20:55:03

树的高度,深度,层数和三种遍历方式的相关文章

重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现

读完本文你将了解到: 什么是二叉树 Binary Tree 两种特殊的二叉树 满二叉树 完全二叉树 满二叉树 和 完全二叉树 的对比图 二叉树的实现 用 递归节点实现法左右链表示法 表示一个二叉树节点 用 数组下标表示法 表示一个节点 二叉树的主要方法 二叉树的创建 二叉树的添加元素 二叉树的删除元素 二叉树的清空 获得二叉树的高度 获得二叉树的节点数 获得某个节点的父亲节点 二叉树的遍历 先序遍历 中序遍历 后序遍历 遍历小结 总结 树的分类有很多种,但基本都是 二叉树 的衍生,今天来学习下二

二叉树的三种遍历方式的循环和递归的实现方式

///////////////////头文件:BST.h//////////////////////// #ifndef BST_H #define BST_H #include "StdAfx.h" #include<iostream> #include<stack> template<typename DataType> class BST { public: class Node { public: Node(int data=0):m_dat

十八 二分搜索树的三种遍历方式

三种遍历方式: package com.lt.datastructure.BST; public class BST<E extends Comparable<E>> { private class Node{ public E e; Node left,right; public Node(E e) { this.e = e; this.left = left; this.right = right; } } private Node root; private int size

set的三种遍历方式-----不能用for循环遍历(无序)

set的三种遍历方式,set遍历元素 list 遍历元素 http://blog.csdn.net/sunrainamazing/article/details/71577662 set遍历元素 http://blog.csdn.net/sunrainamazing/article/details/71577893 map遍历元素 http://blog.csdn.net/sunrainamazing/article/details/71580051 package sun.rain.amazi

for 、foreach 、iterator 三种遍历方式的比较

习惯用法 for.foreach循环.iterator迭代器都是我们常用的一种遍历方式,你可以用它来遍历任何东西:包括数组.集合等 for 惯用法: List<String> list = new ArrayList<String>(); String[] arr = new String[]{"1,2,3,4"}; for(int i = 0;i < arr.length;i++){ System.out.println(arr[i]); } for(i

java中ArrayList集合的三种遍历方式

public class ListDemo { public static void main(String[] args) { ArrayList<String> mList = new ArrayList<>(); mList.add("郭靖"); mList.add("黄蓉"); mList.add("洪七公"); mList.add("周伯通"); // 第一种遍历方式:普通for循环 for

有关不同实现类的List的三种遍历方式的探讨

我们知道,List的类型有ArrayList和LinkedList两种,而曾经的Vector已经被废弃. 而作为最常用的操作之一,List的顺序遍历也有三种方式:借助角标的传统遍历.使用内置迭代器和显式迭代器. 下面,将首先给出两种种不同类型实现的实验结果,之后,将会通过分析JAVA中List的各种实现,来探讨造成实验结果的原因. 1.随机数据的生成 package temp; import java.io.*; import java.util.Random; public class Dat

完全二叉树的三种遍历方式

二叉树的遍历方法有多种,最常用的有中序遍历.先序遍历和后序遍历.毫无例外,这三种遍历方法都是基于递归/迭代的思想 为了更好的说明三种遍历,结合图片. 假设现在存在{1,3,5,7,9,2,4,6,8,10}的一个完全二叉树 中序遍历:遍历时先尝试访问当前结点的左子结点,如果左子结点不存在,则读取当前结点的数据,然后再访问当前结点的右子结点.对应的遍历结果是:6 7 8 3 10 9 1 2 5 4 先序遍历:遍历时先读取当前结点的数据,然后在访问当前结点左子结点.仅当左子结点不存在,则访问右子结

二叉树的存储方式以及递归和非递归的三种遍历方式

树的定义和基本术语 树(Tree)是n(n>=0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件: (1)有且仅有一个特定的称为根(Root)的结点: (2)其余的结点可分为m(m>=0)个互不相交的子集T1,T2,T3-Tm,其中每个子集又是一棵树,并称其为子树(Subtree). 树形结构应用实例: 1.日常生活:家族谱.行政组织结构:书的目录 2.计算机:资源管理器的文件夹: 编译程序:用树表示源程序的语法结构: 数据库系统:用树组织信息: 分析算法:用树来描述其执行过程: