二叉树的详细实现(含递归展开图)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的详细实现(含递归展开图)相关的知识,希望对你有一定的参考价值。

(文章目录)

一、二叉树

1. 概念

2.特点

3.特殊二叉树

1.满二叉树

2.完全二叉树

4.性质

性质1.

性质2.

性质3.

性质4.

二、二叉树整体实现

1.前序的实现

void  prevorder(BTnode* root)//前序  根 左子树 右子树

	if (root == NULL)
	
		printf("NULL ");
		return;
	
	printf("%c ", root->data);
	prevorder(root->left);
	prevorder(root->right);

递归展开图

2.中序的实现

void  inorder(BTnode* root)//中序 左子树 根 右子树

	if (root == NULL)
	
		printf("NULL ");
		return;
	
	inorder(root->left);
	printf("%c ", root->data);
	inorder(root->right);

递归展开图


3.后序的实现

void  postorder(BTnode* root)//后序 左子树 右子树 根

	if (root == NULL)
	
		printf("NULL ");
		return;
	
	postorder(root->left);
	postorder(root->right);
	printf("%c ", root->data);

递归展开图

4. 节点个数

int treesize(BTnode* root)//节点个数

	if (root == NULL)
	
		return 0;
	
	return treesize(root->left) + treesize(root->right) + 1;

递归展开图

5. 叶节点个数

int treeleafsize(BTnode* root)//叶子节点的个数

	if (root == NULL)
	
		return 0;
	
	if (root->left == NULL && root->right == NULL)//只有当左右子树都为NULL时才会返回1
	
		return  1;
	
	 return treeleafsize(root->left)+ treeleafsize(root->right);

递归展开图

6.层序遍历

void levelorder(BTnode* root)//层序遍历 需要借助数据结构栈来实现

	queue q;
	queueinit(&q);//初始化栈
	if (root)
	
		queuepush(&q, root);//将根结点入栈
	
	while (!queueempty(&q))
	
		 datatype front=queuefront(&q);//出栈
		 queuepop(&q);//删除栈顶元素
		 printf("%c ", front->data);
		 if (front->left != NULL)
		 
			 queuepush(&q, front->left);//判断此时该结点的左子树是否为空 若不空则入栈
		 
		 if (front->right != NULL)
		 
			 queuepush(&q, front->right);//判断此时该结点的右子树是否为空 若不空则入栈
		 
	
	queuedestroy(&q);//销毁内存

以上是关于二叉树的详细实现(含递归展开图)的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的递归实现

二叉树中序遍历(递归和非递归)算法C语言实现

二叉树的前中后和层序遍历详细图解(递归和非递归写法)

二叉树的非递归遍历(先序中序后序和层序遍历)

二叉树的递归与迭代遍历

二叉树的广度优先遍历深度优先遍历的递归和非递归实现方式