您的位置:首页 > 编程语言 > Java开发

树的中序遍历(递归和非递归java实现)

2017-03-13 17:08 204 查看
树的中序遍历(递归和非递归实现)

树的基本遍历是解决树相关问题的基础,所以要很熟悉,理解透彻!

二叉树的结点定义:
class BinaryTree{
public int value;
public BinaryTree leftNode;
public BinaryTree rightNode;
BinaryTree(int x) { value = x; }
}


中序遍历的递归实现代码:【访问次序:左根右】

void InOrder(BinaryTree root){
if(root !=null){
InOrder(root.left);
System.out.println(root.value);
InOrder(root.right);
}
}


中序遍历的非递归算法【java实现】:

package com.mytest.mymain;
import java.util.Stack;
class BTree{
public int value;  //public static int value;  那么最终输出都为8个8
public BTree left;
public BTree right;
BTree(int x) { value = x; }
}
public class PreOrderwithStack {
public static void main(String[] args) {
BTree root=new BTree(1);
BTree Node2=new BTree(2);
BTree Node3=new BTree(3);
BTree Node4=new BTree(4);
BTree Node5=new BTree(5);
BTree Node6=new BTree(6);
BTree Node7=new BTree(7);
BTree Node8=new BTree(8);
root.left=Node2;
root.right=Node3;

Node2.left=Node4;
Node2.right=Node5;

Node3.left=Node6;
Node3.right=Node7;

Node4.left=Node8;

preorderfun(root);
System.out.println();
inorderfun(root);
}

public static void inorderfun(BTree root){
Stack<BTree> stack =new Stack<BTree>();
BTree bTree=null;
if(root!=null){
bTree=root;
while(!stack.isEmpty() || bTree!=null){
while(bTree!=null){//处理所有左结点,进栈
stack.push(bTree);
bTree=bTree.left;
}
if(!stack.isEmpty()){//执行到这里,栈顶元素没有左孩子或者左子树都被访问过
bTree=stack.pop();
System.out.print(bTree.value+"  ");
bTree=bTree.right;
}
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: