0144-二叉树的前序遍历
2021/9/6 23:38:40
本文主要是介绍0144-二叉树的前序遍历,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
问题描述
https://leetcode-cn.com/problems/binary-tree-preorder-traversal/
求解思路
递归:
在外层接口函数preorderTraversal()
中申请空间并传递给核心的preorder()
函数,在其中前序递归访问二叉树上的每一个节点。
使用栈迭代:
//外层大循环: while(非空节点||栈非空){ //内层小循环 while(非空节点){ 访问该节点; 该节点入栈; 指向左儿子; } 出栈一个节点; 指向右儿子; }
代码实现
递归实现:
void preorder(struct TreeNode* root, int* resultArray, int* returnSize) { if (root == NULL) return; resultArray[(*returnSize)++] = root->val; preorder(root->left, resultArray, returnSize); preorder(root->right, resultArray, returnSize); return; } int* preorderTraversal(struct TreeNode* root, int* returnSize) { int* resutlArray = (int*)malloc(sizeof(int) * 100); *returnSize = 0; preorder(root, resutlArray, returnSize); return resutlArray; }
使用栈迭代实现:
int* preorderTraversal(struct TreeNode* root, int* returnSize) { int* resutlArray = (int*)malloc(sizeof(int) * 100); *returnSize = 0; struct TreeNode* stk[100]; int top = 0; while (root != NULL || top > 0) { while (root != NULL) { //前序遍历 resutlArray[(*returnSize)++] = root->val; stk[top++] = root; root = root->left; } root = stk[--top]; root = root->right; } return resutlArray; }
收获和疑惑
注意C语言中多层递归函数共享同一个变量的方式:传递指针。
还有一种S(1)的Morris
中序遍历算法,看不懂。
这篇关于0144-二叉树的前序遍历的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南