递归遍历二叉树,怎样保存结点数值到数组里

问题描述

递归遍历二叉树,怎样保存结点数值到数组里

求讲解 递归遍历二叉树的时候,怎样能 在访问每个结点时,将结点的数值存到数组里。最后得到一个结点数值的数组。教材上遍历的时候都是直接输出,没有存到数组里,但是我在编程时遇到了要存到数组里的问题。求大神~~~

追问:
追问一下,我晚上试了一下,感觉使用数组作为参数看起来可以,但是在递归的时候每次递归数组的角标i都会被重新定义。貌似全局变量或者静态局部变量在递归时都会被重新定义。这怎么处理啊 好心塞

解决方案

将数组作为一个遍历函数的一个参数,遍历到一个节点,就将该节点数值保存到数组中,由于数组的传递是地址传递,所以函数中的改变会反应到外部,所以遍历结束,数组中就是遍历的数据

解决方案二:

关键的问题在于,你没有办法事先知道需要多大的数组。所以有两个办法,一个是估算一个数组的大小,如果超过,就再开一个更大的数组,把现有的数据拷贝进去。
另一个办法是先开一个向量或者链表存数据,最后再转换为数组。

解决方案三:

两种方法,1.开一个全局数组,2.数组的指针当参数传递

时间: 2024-08-07 03:34:04

递归遍历二叉树,怎样保存结点数值到数组里的相关文章

有关后序非递归遍历二叉树的问题

问题描述 有关后序非递归遍历二叉树的问题 void show_LRD(tree LRD) { //后序非递归遍历二叉树 int otherstack[max];//辅助栈,用于检测出栈时是否已经遍历右子树 int *othertop,*otherbottom; tree temp; othertop=otherbottom=otherstack; while(LRD||!emptystack()) { while(LRD) { while(LRD) { inputstack(LRD); *oth

@数据结构大神:递归遍历二叉树,建立树的代码 为什么错?

问题描述 @数据结构大神:递归遍历二叉树,建立树的代码 为什么错? //创建-输入-打印-递归 # include<stdio.h> # include<stdlib.h> # include<malloc.h> typedef struct Node{ char data; struct Node *Lchild; struct Node *Rchild; }BiTNode,*BiTree; BiTree CreateBiTree(BiTree bt) { char

不用递归遍历一颗二叉树

问题描述 不用递归遍历一颗二叉树 用递归遍历二叉树很简单,但是现在的问题是,能不能不用递归去遍历呢?用C#或者Java给出代码更好. 解决方案 简单来说有两个思路 (1)使用后序遍历的方法.也就是说对于一个节点,先找它的左子节点,再找右子节点,最后找它本身.(深度优先) (2)使用线形表来存储二叉树.二叉树是可以直接用线形表表达的.(广度优先) 解决方案二: 给出C++代码吧!把递归改为非递归,一般都是通过栈来实现.函数递归的原理也是利用了栈. 首先来看前序遍历:前序遍历是先访问当前结点,再访问

二叉树递归和非递归遍历

二叉树是一种非常重要的数据结构,很多其他数据机构都是基于二叉树的基础演变过来的.二叉树有前.中.后三种遍历方式,因为树的本身就是用递归定义的,因此采用递归的方法实现三种遍历,不仅代码简洁且容易理解,但其开销也比较大,而若采用非递归方法实现三种遍历,则要用栈来模拟实现(递归也是用栈实现的).下面先简要介绍三种遍历方式的递归实现,再详细介绍三种遍历方式的非递归实现. 一.三种遍历方式的递归实现(比较简单,这里不详细讲解) 1.先序遍历--按照"根节点-左孩子-右孩子"的顺序进行访问. vo

C语言二叉树的非递归遍历实例分析_C 语言

本文以实例形式讲述了C语言实现二叉树的非递归遍历方法.是数据结构与算法设计中常用的技巧.分享给大家供大家参考.具体方法如下: 先序遍历: void preOrder(Node *p) //非递归 { if(!p) return; stack<Node*> s; Node *t; s.push(p); while(!s.empty()) { t=s.top(); printf("%d\n",t->data); s.pop(); if(t->right) s.pus

C++实现二叉树非递归遍历方法实例总结_C 语言

一般来说,二叉树的遍历是C++程序员在面试中经常考察的,其实前中后三种顺序的遍历都大同小异,自己模拟两个栈用笔画画是不难写出代码的.现举一个非递归遍历的方法如下,供大家参考. 具体代码如下: class Solution { public: vector<int> preorderTraversal(TreeNode *root) { vector<int> out; stack<TreeNode*> s; s.push(root); while(!s.empty()

java-为什么要遍历二叉树?遍历二叉树的算法一般能应用到哪里?

问题描述 为什么要遍历二叉树?遍历二叉树的算法一般能应用到哪里? 一般文件夹结构是n叉树,又不是二叉树,为什么要遍历二叉树呢? 解决方案 学习二叉树重点就是遍历算法,我们主要是要把遍历算法学会.随后可以应用到网络爬虫这些. 解决方案二: 二分查找元素的时候,就是二叉树. 解决方案三: 一般,在即时战略游戏中,对判定算法会有较高的时间性能要求 解决方案四: 一般,在即时战略游戏中,对判定算法会有较高的时间性能要求 解决方案五: 学习二叉树重点就是遍历算法,我们主要是要把遍历算法学会.随后可以应用到

PHP不用递归遍历目录下所有文件的代码_php实例

实现代码: /** * PHP 非递归实现查询该目录下所有文件 * @param unknown $dir * @return multitype:|multitype:string */ function scanfiles($dir) { if (! is_dir ( $dir )) return array (); // 兼容各操作系统 $dir = rtrim ( str_replace ( '\\', '/', $dir ), '/' ) . '/'; // 栈,默认值为传入的目录 $

PHP递归遍历指定目录的文件并统计文件数量的方法_php技巧

本文实例讲述了PHP递归遍历指定目录的文件并统计文件数量的方法.分享给大家供大家参考.具体实现方法如下: <?php //递归函数实现遍历指定文件下的目录与文件数量 function total($dirname,&$dirnum,&$filenum){ $dir=opendir($dirname); echo readdir($dir)."<br>"; //读取当前目录文件 echo readdir($dir)."<br>&qu