首页 > 其他分享 >用递归和非递归两种方式实现二叉树的中序遍历

用递归和非递归两种方式实现二叉树的中序遍历

时间:2023-09-05 16:35:03浏览次数:39  
标签:Node head 递归 中序 value stack 二叉树 public

一、分析

中序遍历遍历顺序为:左、根、右。

二、递归实现

public class Node{
	public int value;
  public Node left;
  public Node right;
  
  public Node(int data){
  	this.value = data;
  }
}

public void inOrderRecur(Node head){
	if(head == null){
  	return;
  }
  inOrderRecur(head.left);
  System.out.println(head.value + " ");
  inOrderRecur(head.right);
}

三、非递归实现

3.1 问题分析

用递归方法解决的问题都能用非递归方法实现,这是因为递归方法无非就是利用函数栈来保存信息,如果用自己申请的数据结构来代替函数栈,也可以实现相同的功能。

用递归方式实现二叉树的前序遍历过程如下:

1、申请一个新的栈,记为stack。

2、然后将头节点head压入stack中,依次把左边界压入栈中,即head = head.left; 然后重复步骤2。

3、不断重复步骤2,直到head为空,此时从stack栈中弹出一个节点,记为node。打印node的值,并且让cur = node.right,然后继续重复步骤2。

4、当stack为空且cur为空时,整个过程停止。

public class Node{
	public int value;
  public Node left;
  public Node right;
  
  public Node(int data){
  	this.value = data;
  }
}

public void inOrderunRecur(Node head){
	System.out.println("inOrder: ");
	if(head != null){
    Stack<Node> stack = new Stack<Node>;
    while(!stack.isEmpty() || head != null){
    		if(head != null){
        	stack.push(head);
          head = head.left;
        }else{
        	head = stack.pop();
          System.out.println(head.value + " ");
          head = head.right;
        }
    }
  }
  System.out.println();
}

标签:Node,head,递归,中序,value,stack,二叉树,public
From: https://blog.51cto.com/u_16244372/7373765

相关文章

  • 二叉树-257二叉树的所有路径带回溯思想
    257. 二叉树的所有路径1#Definitionforabinarytreenode.2#classTreeNode:3#def__init__(self,val=0,left=None,right=None):4#self.val=val5#self.left=left6#self.right=right7classSolution:8......
  • day21 - 二叉树part07
    530. 二叉搜索树的最小绝对差详解/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left......
  • 二叉树
    节点(Node):树形结构中的基本单位,可以表示数据元素或对象。节点可以包含一个或多个子节点。根节点(RootNode):树的顶层节点,它没有父节点,是整个树的起点。子节点(ChildNode):树中每个节点都可以有零个或多个子节点,子节点是位于其父节点下方的节点。父节点(ParentNode):每个节点(除......
  • 精简深拷贝ArrayList实例(包括递归和序列化方法)
    作者fbysss关键字:深拷贝,序列化前言:     日前一哥们问我一个有关多层ArrayList拷贝的问题,我帮他写了一个例程,感觉以后用得着,便放上来了。如果要在自身类中加入Clone功能,需要implementsICloneable接口,然后用下面的相应代码重写clone方法即可。源代码:packagecom.sss.t......
  • 用递归和非递归两种方式实现二叉树的先序遍历(前序遍历)
    一、分析先序遍历(前序遍历)遍历顺序为:根、左、右。二、递归实现publicclassNode{ publicintvalue;publicNodeleft;publicNoderight;publicNode(intdata){ this.value=data;}}publicvoidpreOrderRecur(Nodehead){ if(head==null){ return......
  • 《剑指Offer》-68-二叉树的最近公共祖先
    二叉搜索树 TreeNode*lowestCommonAncestor(TreeNode*root,TreeNode*p,TreeNode*q){ //如果p、q一定存在,那么root就一定不是空指针 TreeNode*traverse=root; while(true){ if(p->val<traverse->val&&q->val<traverse->val)traverse=tra......
  • vue 组件递归显示,递归组件中事件传值问题。
    1、比如下面的结构[{id:1,text:'1',children:{id:2,text:'2',children:{id:3,text:'3'......}}]可以看到,每个节点下面的children都是不一定的,有的可能会有很多层,有的可能只有一层。......
  • leetcode226 翻转二叉树——简单
      #Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:definvertTree(self,root):......
  • 汉诺塔问题C语言递归
    (汉诺塔问题C语言递归)什么是汉诺塔问题汉诺塔问题是一个经典的问题。汉诺塔(HanoiTower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另......
  • 递归乘法表
    #include<bits/stdc++.h>usingnamespacestd;voidno(inta,intb){ if(b<=9){ if(a<=b){ cout<<a<<"*"<<b<<"="<<a*b<<""; no(a+1,b); }else{ cout<<endl; no(1,b+1); } ......