C语言每日一题(49)二叉树的三种基本遍历方法

题目链接

前序遍历

中序遍历

后序遍历

知识点:链式二叉树、递归

思路分析

顺便说一下三种遍历的方法

前序遍历:根、左子树、右子树

中序遍历:左子树、根、右子树

后序遍历:左子树、右子树、根

以这棵树为例

以前序遍历为例,根据递归的思想,先打印根节点数据再将自己的左孩子结点和右孩子结点分别为参数调用自己,依次递归到叶子结点,即所传入参数为空时返回。

其实递归就是在自己体内调用自己,相当于有一个人给大家讲故事,故事内容是:一个人在给大家讲故事。即在故事中提到同样的故事,这就是递归。

把思想实现在题中

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */

int BinaryTreeSize(struct TreeNode* root)
{
	if (root == NULL)
	{
		return 0;
	}
	return BinaryTreeSize(root->left) + BinaryTreeSize(root->right) + 1;//求二叉树结点个数
}
void PrevOrder(struct TreeNode* root,int* a,int* pi)
{
	if (root == NULL)
	{
		return;
	}
    a[(*pi)++]=root->val;
	PrevOrder(root->left,a,pi);
	PrevOrder(root->right,a,pi);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
    int n=BinaryTreeSize(root);
    *returnSize=n;
    int* a=(int*)malloc(sizeof(int)*n);//动态申请一个数组,题目要求返回一个数组
    int i=0;
    PrevOrder(root,a,&i);
    return a;
   
}

 对于本题知识点的个人理解

其实,对于简单的递归,可以简单的概括,就是自己调用自己,但后面尝试用递归来做删除链表元素这道题,说实话1,每有任何思路,如果只是根据题解的代码跑一遍,肯定能成功,有一说一这和背代码没区别,递归难就难在如何去递归这个思路出来才是递归的关键

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

对编程一片赤诚的小吴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值