算法(一)——二叉树

一、概念

1、节点

  • 父节点
  • 子节点
  • 兄弟节点:同一父节点的节点
  • 根节点:没有父节点的节点
  • 叶节点:没有字节点的节点

2 深度 高度 层

在这里插入图片描述

  • 高度:从下向上数
  • 深度:从上向下数
  • 层:

3 满二叉树 完全二叉树

满二叉树:

  • 叶子节点都在最底层;
  • 除叶子节点,其余节点都包含左右两个节点
    在这里插入图片描述
    完全二叉树:
  • 除了最后一层,其他层节点数都要达到最大
  • 最后一层叶节点都靠左排列
    在这里插入图片描述

4 二叉树的遍历

根据根节点的顺序命名
在这里插入图片描述
前序遍历:根左右
中序遍历:左根右
后序遍历:左右根

二、代码实现

基于数组的顺序存储法

适用:完全二叉树,
方法:
假设根节点在数组下标为i,且i=1
根节点的左子节点:i * 2
根节点的右子节点:i * 2+1

在这里插入图片描述
核心代码:
前提条件:数组data存储完全二叉树的数据

///<summary>
///
///<param name="index"></param>
///</summary>
private void preOrder(int index)
{
    
    
	if(index>=data.Count||data[index].IsNullOrEmpty()){
    
    
		return ;
	}
	int num=index;
	Console.write(data[index]+" ");
	var leftNum=num*2;
	var rightNum=num*2+1;
	preOrder(leftNum);
	preOrder(rightNum);
}

基于链表实现

猜你喜欢

转载自blog.csdn.net/hhhhhhenrik/article/details/93379518