树的概念和树的遍历方式

1.树的度:例如最大节点的度(直接子孩子个数)

 

二叉树:在二叉树中,节点的度都不超过2

2.子树都是不相交的

3.叶子节点:树中度为0的节点

父节点:度不为0的节点

4.在任意树中,满足边长=定点数-1

二叉树:

1.节点个数N和高度(深度k,根节点为第一层的关系)

N = 2^k-1(最大节点存在满二叉树中)

2.若深度为K,则第k组的节点最多有2^(k-1)个节点

3.在任意的二叉树中,满足度为2的节点N2和叶子结点N0的关系如下:

N2 = N0-1

其实就是根据1边长 =顶点数-1

二叉树中只可能存在度为2,1.0的节点,分别命名为N2,N1,N0

总的节点数 = N2+N1+N0 

边长 = 2N2  + N1 + N0 

2N2  + N1 = N2 + N1 + N0 -1

=> N2 = N0 -1

                                               

 

在完全二叉树中存在两个阶段:第一阶段中:每个节点的度都为2

当碰到第一个度为1的节点或者叶子结点,进入第二阶段在第二阶段中,碰到的所有节点均为叶子结点.

若根节点编号从1开始,则在完全二叉树中,任意节点均为满足

该节点的编号为x ,则左孩子编号为2x,右孩子编号为2x+1,父节点编号为x/2

完全二叉树,度为1的节点要么存在且唯一,要么不存在

若完全二叉树的节点个数为偶数,度为1的节点一定存在且唯一

若完全二叉树的节点个数为奇数,一定不存在度为0的节点

任意的数组结构在计算机内部存储时候都分为基于数组方式的顺序存储和基于引用方式的链式存储

二叉树也分为顺序存储和链式存储

只有完全二叉树适合采用顺序存储(二叉树有左右之分)

 完全二叉树的节点都是靠左排列的,不可能存在只有右子树没有左子树的节点.

二叉树的链式存储 

左右孩子表示法         

class TreeNode(

int val;

TreeNode left;

Tree Node right;

孩子双亲表示法:树中每个节点除了保存树节点外,还要保存其父节点的引用->常用平衡树的定义中   

平衡树                                                                                         

 ;什么是对于一个数据结构的遍历?遍历不仅仅指的是元素的打印或者输出(遍历的一种方式而已)

按照一定的规则,将该数据结构中所有元素访问一次,做到不重不漏(遍历不仅仅是打印)

对于线性数据结构如链表,数组来说,遍历非常容易,要么从前向后遍历,要么从后向前遍历

在非线性结构,如二叉树中,遍历的方式就很多,其实各式各样的树形问题最终都可以看做是如何进行该树的遍历问题

采用不同的遍历方式,得到结果也完全不同

(一)深度优先搜索(二叉树的高度):dfs

这里的序指的是根节点什么时候访问   

  前序遍历   :

 

  中序遍历:

 

 

后序遍历:

 

 

(二)广度优先搜索(二叉树的宽度):bfs         

层序遍历:从二叉树的树根开始不断从上至下,从左至右的遍历。

**序列规律

 

二叉树的基本问题实现           

1.前序,中序,后序的遍历                                           

                

 2.求二叉树的节点个数:

3.找叶子节点个数

 4.找树的高度

 

 

 总结:

5. 在给定一颗以root为树根的二叉树,求出第k层的节点个数(k<=height)

 

 6.检测val的值是否存在?

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值