二叉树先序遍历非递归实现(使用java语言)

30 篇文章 0 订阅
22 篇文章 0 订阅

节点定义

/**
 * className:TreeNode
 *
 * @author:zjl
 * @version:0.1
 * @date:2020/7/1912:49
 * @since:jdk1.8
 */
public class TreeNode {

    private TreeNode left;
    private Object data;
    private TreeNode right;

    public TreeNode() {
        this.left = null;
        this.data = null;
        this.right = null;
    }

    public TreeNode(Object data) {
        this.data = data;
    }

    public TreeNode getLeft() {
        return left;
    }

    public void setLeft(TreeNode left) {
        this.left = left;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public TreeNode getRight() {
        return right;
    }

    public void setRight(TreeNode right) {
        this.right = right;
    }
}

工具类(实现类)

import sun.reflect.generics.tree.Tree;

import java.util.Stack;

/**
 * className:Util
 *
 * @author:zjl
 * @version:0.1
 * @date:2020/7/1912:52
 * @since:jdk1.8
 */
public class Util {

    public void traversal(TreeNode treeNode ){

        if(treeNode!=null){
            Stack<TreeNode> stack = new Stack<>(); //创建一个栈
            stack.push(treeNode);//根节点入栈
            TreeNode node;//用于接收出栈节点
            while (!stack.empty()){
                node = stack.pop();
                System.out.print(node.getData()+" ");//访问节点(data域)
                if(node.getRight()!=null){
                    stack.push(node.getRight());//先将节点右孩子节点入栈
                }
                if(node.getLeft()!=null){
                    stack.push(node.getLeft());//再将节点左孩子节点入栈
                }
            }

        }


    }

}

测试类

手动建立一颗如图所示的树进行测试
在这里插入图片描述

/**
 * className:Test
 *
 * @author:zjl
 * @version:0.1
 * @date:2020/7/1913:11
 * @since:jdk1.8
 */
public class Test {

    public static void main(String[] args) {

        //手动建树
        TreeNode n1 = new TreeNode("我");
        TreeNode n2 = new TreeNode("爱");
        TreeNode n3 = new TreeNode("中");
        TreeNode n4 = new TreeNode("国");
        TreeNode n5 = new TreeNode(",");
        TreeNode n6 = new TreeNode("也");
        TreeNode n7 = new TreeNode("爱");
        TreeNode n8 = new TreeNode("世");
        TreeNode n9 = new TreeNode("界");
        TreeNode n10 = new TreeNode("!");
        n1.setLeft(n2);
        n2.setLeft(n3);
        n3.setRight(n4);
        n1.setRight(n5);
        n5.setLeft(n6);
        n6.setLeft(n7);
        n5.setRight(n8);
        n8.setLeft(n9);
        n8.setRight(n10);

        Util util = new Util();
        //遍历
        util.traversal(n1);
    }

}

测试结果
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值