前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言每日一题(49)二叉树的三种基本遍历方法

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

作者头像
对编程一片赤诚的小吴
发布2024-01-31 10:28:47
900
发布2024-01-31 10:28:47
举报

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

思路分析

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

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

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

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

以这棵树为例

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

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

把思想实现在题中

代码语言:javascript
复制
/**
 * 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,每有任何思路,如果只是根据题解的代码跑一遍,肯定能成功,有一说一这和背代码没区别,递归难就难在如何去递归这个思路出来才是递归的关键

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思路分析
  • 对于本题知识点的个人理解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档