Java实现二叉树的递归与非递归遍历

构造树如下:

其中二叉树节点类

/** 二叉树节点 */
public class BTNode {
   private char key;
   private BTNode left, right;
   public BTNode(char key) {
     this(key, null, null);
   }
   public BTNode(char key, BTNode left, BTNode right) {
     this.key = key;
     this.left = left;
     this.right = right;
   }
   public char getKey() {
     return key;
   }
   public void setKey(char key) {
     this.key = key;
   }
   public BTNode getLeft() {
     return left;
   }
   public void setLeft(BTNode left) {
     this.left = left;
   }
   public BTNode getRight() {
     return right;
   }
   public void setRight(BTNode right) {
     this.right = right;
   }
}

时间: 2024-09-22 09:17:32

Java实现二叉树的递归与非递归遍历的相关文章

全排列的递归与非递归实现浅析

全排列问题在公司笔试的时候很常见,这里介绍其递归与非递归实现. 递归算法 1.算法简述 简单地说:就是第一个数分别以后面的数进行交换E.g:E = (a , b , c),则 prem(E)= a.perm(b,c)+ b.perm(a,c)+ c.perm(a,b)然后a.perm(b,c)= ab.perm(c)+ ac.perm(b)= abc + acb.依次递归进行. void swap(string &pszStr,int k,int m) { if(k==m) return ; c

如何使用递归和非递归方式反转单向链表

以下是对使用递归和非递归方式反转单向链表的示例进行了详细的分析介绍,需要的朋友可以过来参考下   问题: 给一个单向链表,把它从头到尾反转过来.比如: a -> b -> c ->d 反过来就是 d -> c -> b -> a . 分析:假设每一个node的结构是: 复制代码 代码如下: class Node {  char value;  Node next; } 因 为在对链表进行反转的时候,需要更新每一个node的"next"值,但是,在更新

二分查找的递归和非递归

查找算法 常见的查找算法大概有顺序查找.二分查找.二叉排序树查找.哈希表法(散列表).分块查找等, 下面简单了解一下其他几种查找算法. 1.顺序查找 也就是暴力方法,按顺序比较每个元素,直到找到关键字为止. 条件:无序或有序数据,时间复杂度:O(n) 2.二叉排序树查找 二叉排序树的性质: 1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 3. 它的左.右子树也分别为二叉排序树. 在二叉查找树b中查找x的过

求二分查找的递归和非递归的时间空间效率比较

问题描述 求二分查找的递归和非递归的时间空间效率比较 求二分查找的递归和非递归的时间空间效率比较,为什么在刘汝佳的书上说,一般用非递归方法 解决方案 递归算法写起来简单,但是有两个不足,一个是调用接口的开销,函数调用本身是有开销的.另一个是堆栈内存比较小,递归调用层次深,容易引起堆栈溢出错误(著名的stack overflow).非递归没有这个问题.还有就是一些编程语言(很久很久以前,在你出生的年代之前),是没有函数调用的,那么就不能递归了. 解决方案二: 递归牵涉到环境保存和环境恢复操作,因此

妹纸求助-c++编写寻找国都的算法,递归和非递归法

问题描述 c++编写寻找国都的算法,递归和非递归法 用c++编写寻找国都的代码 给出一个矩阵及一些国都名: o k d u b l i n dublin a l p g o c e v tokyo r a s m u s m b london o s l o n d o n rome y i b l g l r c bonn k r z u r i c h paris o a i b x m u z oslo t p q g l a m v lima 要求从这个矩阵中找出这些国都名,并输出它们的

递归算法-C:用递归及非递归解决迷宫问题

问题描述 C:用递归及非递归解决迷宫问题 以下是现有的代码,但是递归放在里面出现错误,求大神给我改改. #include #include #define N 39 #define M 39 int X; int maze[N+2][M+2]; /******递归函数定义*******/ typedef struct { int x,y; }Dj; Dj move[4]; /******非递归函数定义*******/ struct point{ int row,col,predecessor;

c++-1.用list实现stack。 2.递归变非递归。

问题描述 1.用list实现stack. 2.递归变非递归. 1.用list实现stack. template class Stack{ public: intsize() const {___________} voidpush(const T & x) {_________} constT & pop() {__________} private: vectorvt_list; } 麻烦解释一下这个代码,以及空白处应该填什么,谢谢. 2.递归变非递归. #include structN

二叉树递归和非递归遍历

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

递归和非递归方式实现二叉树的建立和遍历

#include<stdio.h> #include<stdlib.h> #define MAXSIZE 20 typedef struct BiTnode{ char data; struct BiTnode *lchild,*rchild; }BiTnode,*BiTree; int i = 0; BiTree Create(BiTree t,char s[]) { char ch; ch = s[i++]; if(ch == ' ') { t = NULL; } else {

二叉树的存储方式以及递归和非递归的三种遍历方式

树的定义和基本术语 树(Tree)是n(n>=0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:   (1)有且仅有一个特定的称为根(Root)的结点:   (2)其余的结点可分为m(m>=0)个互不相交的子集T1,T2,T3-Tm,其中每个子集又是一棵树,并称其为子树(Subtree). 树形结构应用实例: 1.日常生活:家族谱.行政组织结构:书的目录 2.计算机:资源管理器的文件夹:     编译程序:用树表示源程序的语法结构:     数据库系统:用树组织信息:     分