java实现树的前序遍历,递归和非递归实现(简单明了)

简介: java实现树的前序遍历,递归和非递归实现(简单明了)

代码复制粘贴可以直接运行,相关注释都写上了,中序和后序遍历同理,简单明了

package tree;
import java.util.ArrayList;
import java.util.Stack;
public  class java_tree {
    //先定义一个结点类,方便后续操作
     class TreeNode {
        int val;        //结点的值大小
        TreeNode left;  //左节点
        TreeNode right;  //右节点
        TreeNode(int x) {
            val = x;
        }
    }
   static TreeNode[] node = new TreeNode[10];//以数组形式定义一棵完全二叉树,作为java_tree的成员变量
    public void init() {      //初始化方法,用来生成完全二叉树
        for (int i = 0;i < 10; i++) {
            node[i] = new TreeNode(i);
        }
        for (int i = 0;i < 10; i++) {
            if (i * 2 + 1 < 10)
                node[i].left = node[i * 2 + 1];
            if (i * 2 + 2 < 10)
                node[i].right = node[i * 2 + 2];
        }
    }
//----------------------------------------------前序遍历-----------------------------------------------------------------
//递归实现
    public void preOrder(TreeNode root) {
        if (root != null) {
            System.out.print(root.val + " ");
            preOrder(root.left);   //左结点遍历完了就遍历右结点。
            preOrder(root.right);
        }
    }
//非递归实现
        public ArrayList preOrder1(TreeNode root) {
            Stack<TreeNode> stack = new Stack<TreeNode>();
            ArrayList alist = new ArrayList(); //用来存放遍历结果
            TreeNode p = root;
            while (p != null || !stack.empty()) {
                while (p != null) {     //这里while语句是一直遍历左结点,直到所有左结点遍历完
                    alist.add(p.val);
                    stack.push(p);
                    p = p.left;
                }
                if (!stack.empty()) {    //到哪个结点遍历结束左边结点,就弹出这个这个结点,开始遍历又结点
                    TreeNode temp = stack.pop();
                    p = temp.right;
                }
            }
            return alist;
        }
//----------------------------------------------中序遍历-----------------------------------------------------------------
//----------------------------------------------后序遍历-----------------------------------------------------------------
    //测试方法
    public static void main(String[] args) {
        java_tree test=new java_tree();
        test.init();  //执行初始化方法
        System.out.print("前序遍历(递归):");
        test.preOrder(node[0]);   //前序,递归实现
        System.out.println();
        System.out.print("前序遍历(非递归):");
        System.out.println(test.preOrder1(node[0]));
    }
}


20201221133737244.png

目录
相关文章
|
Java
java实现遍历树形菜单方法——OpenSessionView实现
java实现遍历树形菜单方法——OpenSessionView实现
13 0
|
2月前
|
Java
java实现遍历树形菜单方法——TreeAction实现
java实现遍历树形菜单方法——TreeAction实现
10 0
|
2月前
|
Java
java实现遍历树形菜单方法——HibernateUtil实现
java实现遍历树形菜单方法——HibernateUtil实现
11 0
|
2月前
|
Java
java实现遍历树形菜单方法——service层
java实现遍历树形菜单方法——service层
11 0
|
2月前
|
Java
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
11 0
|
2月前
|
Java
java实现遍历树形菜单方法——实体类VoteTree
java实现遍历树形菜单方法——实体类VoteTree
15 0
|
Java
java实现遍历树形菜单方法——index.jsp实现
java实现遍历树形菜单方法——index.jsp实现
7 0
|
1天前
|
自然语言处理 Java 编译器
【Java探索之旅】方法重载 递归
【Java探索之旅】方法重载 递归
10 0
|
5天前
|
SQL Java 关系型数据库
java 递归返回树形组织结构(附带树形菜单的搜索)
java 递归返回树形组织结构(附带树形菜单的搜索)
8 0
|
2月前
|
Java
java实现遍历树形菜单方法——Dao层
java实现遍历树形菜单方法——Dao层
11 0