LeetCode二叉树

目录

 

一、LeetCode二叉树:

二、二叉树的三种遍历方式

什么是二叉树

 先(根)序遍历的递归算法定义:

 中(根)序遍历的递归算法定义:

 后(根)序遍历得递归算法定义:

 


一、LeetCode二叉树:

题目描述:

层次遍历的基本思路是从上到下,从左到右进行遍历,我们进行碰到数据的过程和要处理的过程方向是一致的,所以最好使用队列queue数据结构:在while循环中,每处理一个数据,一次把它的左子节点(如果有的话)和右子节点(如果有的话)入队,直到队列变空。在进入下一层的入队。

int **result = (int **)malloc(sizeof(int*)*SIZE);//定义一个二维数组存储
	struct TreeNode *queue[SIZE]; //定义队列
	int rear = 0;
	int head = 0; // 首位开始都在0,此时为空
	int *key = (int*)malloc(sizeof(int)*SIZE);
	memset(key, 0, sizeof(int)*SIZE);//将0赋给key
	if (root == NULL)//如果根结点为零,则返回NULL
		return NULL;
	queue[rear] = root;//将根结点入队
	rear = (rear + 1) % SIZE;//队列数组往后加1
	int height = 0;//深度
	key[height] += 1;//从第一层开始
	while (head != rear) //如果位置上的值不为空,依次遍历
	{
		height += 1;//进入下一深度
		int i = 0;
		result[height - 1] = (int *)malloc(sizeof(int) * key[height - 1]);//给这一层分配相应的空间
		while (i < key[height - 1]) //遍历每一层的数
		{
			root = queue[head];//出队
			head = (head + 1) % SIZE;//移动下一位
			result[height - 1][i++] = root->val;//二维数组的第[height-1][i++]放入值val
			if (root->left)//如果存在左结点
			{
				queue[rear] = root->left;//左结点进入队列
				rear = (rear + 1) % SIZE;
				key[height] += 1;
			}
			if (root->right)//如果存在右结点
			{
				queue[rear] = root->right;
				rear = (rear + 1) % SIZE;
				key[height] += 1;
			}
		}
	}
	*columnSizes = key;
	*returnSize = height;
	return result;//返回这个二维数组

二、二叉树的三种遍历方式

什么是二叉树

  • 二叉树是每个结点最多有两个子树的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。
  • 性质:
    • 性质1:二叉树第i层上的结点数目最多为2i-1(i>=1)
    • 性质2:深度为k的二叉树至多有2k-1个结点(k>=1)
    • 性质3:包含n个结点的二叉树的高度至少为(log2n)+1
    • 性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1

满二叉树,完全二叉树:

  • 满二叉树,度为0和2的二叉树;
  • 完全二叉树,只有最下面两层节点,度小于2的二叉树;
  • 完全二叉树,若设二叉树的高度为h,除第h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。
  • 完全二叉树,度为1的节点要么为0,要么为1。

一些性质:

  • 如果一棵完全二叉树的结点总数为n,那么叶子结点等于n/2(当n为偶数时)或者(n+1)/2(当n为奇数时)
  • 定义n为节点总个数,n0是度为0的个数,n1是度为1的个数,n2是度为2个数。
    • 则有n=n0*0+n1*1+n2*2+1 ; n = n0+n1+n2 。
    • n0=n2+1。

 先(根)序遍历的递归算法定义:

若二叉树非空,则依次执行如下操作:

⑴ 访问根结点;

⑵ 遍历左子树;

⑶ 遍历右子树。

 中(根)序遍历的递归算法定义:

若二叉树非空,则依次执行如下操作:

⑴遍历左子树;

⑵访问根结点;

⑶遍历右子树。

 后(根)序遍历得递归算法定义:

若二叉树非空,则依次执行如下操作:

⑴遍历左子树;

⑵遍历右子树;

⑶访问根结点。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值