LeetCode:二叉树的非递归中序遍历
第一次动手写二叉树的,有点小激动,64行的if花了点时间,上传leetcode一次点亮~~~
1 /* inorder traversal binary tree */ 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 6 struct TreeNode { 7 int val; 8 struct TreeNode *left; 9 struct TreeNode *right; 10 }; 11 12 int* inorderTraversal(struct TreeNode* root, int* returnSize); 13 14 int main() { 15 16 struct TreeNode n1, n2, n3; 17 n1.val = 1; 18 n1.left = NULL; 19 n1.right = &n2; 20 /* */ 21 n2.val = 2; 22 n2.left = &n3; 23 n2.right = NULL; 24 /* */ 25 n3.val = 3; 26 n3.left = NULL; 27 n3.right = NULL; 28 int returnSize = 0; 29 int *a = inorderTraversal(&n1, &returnSize); 30 31 int i=0; 32 for(i=0; i<returnSize; i++) 33 printf("%d ", a[i]); 34 35 printf("\n"); 36 37 } 38 39 40 /** 41 * Definition for a binary tree node. 42 * struct TreeNode { 43 * int val; 44 * struct TreeNode *left; 45 * struct TreeNode *right; 46 * }; 47 */ 48 /** 49 * Return an array of size *returnSize. 50 * Note: The returned array must be malloced, assume caller calls free(). 51 */ 52 int* inorderTraversal(struct TreeNode* root, int* returnSize) { 53 54 struct TreeNode **stack = (struct TreeNode **) malloc (sizeof(struct TreeNode *) * 1000); /* store node not access at present */ 55 int *result = (int *) malloc(sizeof(int) * 1000); 56 int count = 0; 57 stack[0] = root; /* first node */ 58 struct TreeNode* curr; 59 int top = 0; /* element number in stack */ 60 61 while(top != -1 ) { 62 curr = stack[top]; /* get stack top element */ 63 64 if(curr == NULL) { /* if current element is null */ 65 while(top != -1 && curr == NULL) 66 curr = stack[--top]; 67 if(top == -1 || curr == NULL) 68 break; 69 else { 70 result[count++] = curr->val; 71 stack[top] = curr->right; 72 continue; 73 } 74 } 75 if(curr->left != NULL) 76 stack[++top] = curr->left; 77 78 if(curr->left == NULL) { /* if left subtree is NULL, then we need to access middle node */ 79 result[count++] = curr->val; 80 stack[top] = curr->right; 81 } 82 } 83 *returnSize = count; 84 return result; 85 }
LeetCode:二叉树的非递归中序遍历相关推荐
- 非递归前序遍历二叉树,非递归中序遍历二叉树,非递归后续遍历二叉树
import java.util.Stack;public class Front {//非递归前序遍历public void front(TreeNode node) {Stack<TreeN ...
- 数据结构之---非递归中序遍历二叉树
二叉树中序非递归遍历算法实现 大家好,我是逝去的粒子,从今天起,我将尝试着数据结构从0开始学习分享,此篇文章作为试验,一方面可以为自己做笔记防止遗忘,另一方面希望可以帮助大家.不废话,正式开始. 1. ...
- 非递归中序遍历二叉树总结(2种方法)
算法 非递归中序遍历二叉树总结(2种方法) @author:Jingdai @date:2020.12.03 传送门 非递归先序遍历二叉树 非递归后序遍历二叉树 方法1 先序遍历是第一次遇到该节点遍历 ...
- 非递归中序遍历二叉树
中序遍历二叉树(递归) void inOrder(BT* root) {if (root == NULL)return;inOrder(root->lchild);cout << & ...
- 不用栈实现二叉树非递归中序遍历
偶尔看到这样一个问题: 有个二叉树,每个节点除了左右指针外,还有一个指向父节点的指针. 要求不用递归,中序遍历这棵树.另要求空间复杂度是O(1). 空间复杂度为O(1),摆明就是不让用堆栈模拟递归,所 ...
- 二叉树非递归中序遍历
二叉树的中序遍历 为什么把中序遍历放在最前面呢,因为在非递归遍历中,这个是最简单也是最容易理解的,所以放在第一个的位置. 中序遍历的递归算法很简单,但是想要非递归的实现,就要用到栈这个数据结构, 那么 ...
- 无栈非递归中序遍历非线索化二叉树
试设计一个非递归算法,按中根顺序遍历非线索二叉树,但不得用任何辅助. 在执行算法期间,允许改变LLINK和RLINK的值. 如何不用辅助栈非递归遍历二叉树呢? 这里给出了一个比较方便的算法,其基本思路 ...
- 二叉树的非递归后序遍历(双栈法和双指针法,有图有真相)
一,前言 本文是原创作品,可能存在不足,欢迎大家指正,礼貌交流,感激不尽. 二,思路 二叉树后序遍历不同于前序遍历和中序遍历,后序遍历是三者之间最难的.下面就让我们来梳理一下代码的逻辑,看看如何轻松地 ...
- Python实现二叉树的非递归先序遍历
思路: 1. 使用列表保存结果: 2. 使用栈(列表实现)存储结点: 3. 当根结点存在,保存结果,根结点入栈: 4. 将根结点指向左子树: 5. 根结点不存在,栈顶元素出栈,并将根结点指向栈顶元素的 ...
最新文章
- 【Maven实战】之基础知识点
- 1095 Cars on Campus (30 分)【难 / 模拟 未完成】
- 【哲学】社会主义与资本主义的区别
- Windows下PHP多线程扩展pthreads的安装
- 自然语言处理(1)-概述
- 8086/8088内部结构
- js验证手机号码,邮箱,qq号
- python和javaweb开发哪个更火_python和Java哪个更适合web开发?
- [随心译]2017.8.5-你家毛茸茸的宠物的荤粮正在加速气候变化
- 【SPFA】【最短路】 腾讯大战360
- 作宾语,不定式与动名词的区别——脑动词和手动词
- 明尼苏达量表结果分析_MMPI明尼苏达多项人格测验量表分析
- android数据线接口定义,安卓手机数据线接口类型
- Error:403 No valid crumb was included in the request
- idea配置tomcat
- 2021双非计算机保研之路(经验之谈)
- 网线专业测试软件,网线测试仪怎么用_网线测试仪的使用方法图解
- 专利申请的流程、材料及费用
- 不妨借一步说话,你想知道的关于设计模式的种种,android物联网开发配套代码
- 杨百万:这么多年不倒 重要的是信奉落袋为安
热门文章
- 借个iPad玩玩,越狱4.2.1成功
- 初探SQL Server 2008商业智能
- 做个天气预报的小例子
- jsp示例-response页面重定向
- Golang——时间日期函数
- java cache-control_详解浏览器Cache-Control缓存策略
- git master代码被删除 怎么恢复_git 分支的删除与恢复
- 进程 zabbix_Zabbix监控在windows的进程(非进程数)
- python人工智能pdf_800G人工智能学习资料:AI电子书+Python语言入门+教程+机器学习等限时免费领取!...
- java 抽象类 方法_java 抽象类