144. 二叉树的前序遍历
发布日期:2025-06-19 05:56:22
浏览次数:4
分类:精选文章
本文共 1483 字,大约阅读时间需要 4 分钟。
二叉树的前序遍历问题分析及解决方案
项目场景
我们需要实现一个函数,该函数接受二叉树的根节点,并返回其节点值的前序遍历结果。
问题描述
给定二叉树的根节点root,返回节点值的前序遍历。
原因分析
递归算法的三大步骤:
- 确定递归函数的参数和返回值:函数需要处理树的根节点,并记录结果和结果的大小。
- 确定终止条件:当根节点为空时,遍历结束。
- 确定单层递归的逻辑:处理当前节点值,递归处理左子树,最后递归处理右子树。
非递归实现:使用栈模拟递归过程,先处理根节点,处理完左子树后处理右子树。
解决方案
递归算法
/** * 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(). */#define SIZE 2000void preorder(struct TreeNode* root, int* res, int* resSize) { if (root == NULL) return; res[(*resSize)++] = root->val; preorder(root->left, res, resSize); preorder(root->right, res, resSize);}int* preorderTraversal(struct TreeNode* root, int* returnSize) { int* res = malloc(sizeof(int) * SIZE); *returnSize = 0; preorder(root, res, returnSize); return res;} 非递归实现
int* preorderTraversal(struct TreeNode* root, int* returnSize) { int* res = malloc(sizeof(int) * 2000); *returnSize = 0; if (root == NULL) { return res; } struct TreeNode* stk[2000]; struct TreeNode* node = root; int stk_top = 0; while (stk_top > 0 || node != NULL) { while (node != NULL) { res[(*returnSize)++] = node->val; stk[stk_top++] = node; node = node->left; } node = stk[--stk_top]; node = node->right; } return res;} 总结
通过递归和非递归两种方法,我们可以高效地实现二叉树的前序遍历。递归方法直观简洁,而非递归方法在栈溢出风险较低的情况下提供了另一种实现方案。选择哪种方法取决于具体需求和性能考量。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2026年06月02日 00时40分33秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP查找数组中最大值与最小值
2023-03-01
php查最大值,在PHP数组中查找最大值
2023-03-01
php根据年月日计算年龄
2023-03-01
RabbitMQ - 单机部署(超详细)
2023-03-01
php检查注册,PHP检查注册的电子邮件地址是一个’school.edu’地址
2023-03-01
php模拟发送GET和POST请求
2023-03-01
RabbitMQ - 以 MQ 为例,手写一个 RPC 框架 demo
2023-03-01
php模板引擎smarty
2023-03-01
php正则表达式模式
2023-03-01
php正则表达式的特殊字符含义
2023-03-01
PHP正则表达式获取武汉市的实时pm2.5数据并邮件发送phpmailer
2023-03-01
RabbitMQ + JMeter组合,优化你的中间件处理方式!
2023-03-01
PHP水仙花问题解法之一
2023-03-01
php没有解析是怎么回事,linux下php文件没有被剖析怎么办?_后端开发
2023-03-01
php注册页面实现注册后跳转页面
2023-03-01
PHP消息队列的实现方式与详解,值得一看
2023-03-01
PHP混合Go协程并发
2023-03-01
php源码中如何添加滚动公告,给WordPress网站添加滚动公告的方法
2023-03-01
PHP源码安装后如何新增模块
2023-03-01