目录
一、思路详解
1.1 递归思路
1.2 递归分支图
1.3 递归栈帧图
二、C语言实现
2.1 前序遍历
2.2 中序遍历
2.3 后序遍历
三、查找值为x的结点
3.1 递归思路
3.2 C语言代码
一、思路详解
采用递归的思想解决问题,以高度为3的满二叉树为例。
1.1 递归思路
考虑特殊情况:
- 如果是空节点,返回NULL
- 如果不空返回该节点的值域
考虑一般情况:
-  每个节点都可被看作根节点,去重复递归左右子树 
1.2 递归分支图

1.3 递归栈帧图

二、C语言实现
2.1 前序遍历
void PrevOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("N ");
		return;
	}
	printf("%d ", root->data);
	PrevOrder(root->left);
	PrevOrder(root->right);
}2.2 中序遍历
void InOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("N ");
		return;
	}
	InOrder(root->left);
	printf("%d ", root->data);
	InOrder(root->right);
}2.3 后序遍历
void InOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("N ");
		return;
	}
	InOrder(root->left);
	printf("%d ", root->data);
	InOrder(root->right);
}三、查找值为x的结点
3.1 递归思路
考虑特殊情况:
- 如果是空节点,返回NULL
- 如果是要找的结点,返回该节点
考虑一般情况:
- 每个节点都可被看作根节点,去重复递归左右子树
注意:由于函数只有一个返回值,所以在左子树如果遍历到右子树就无需再次遍历。
3.2 C语言代码
BTNode* TreeFind(BTNode* root, int x)
{
	if (root == NULL)
	{
		return NULL;
	}
	if (root->data == x)
	{
		return root;
	}
	BTNode* ret1 = TreeFind(root->left, x);
	if (ret1)
	{
		return ret1;
	}
	BTNode* ret2 = TreeFind(root->right, x);
	if (ret2)
	{
		return ret2;
	}
	return NULL;
}


















