java非递归遍历树_二叉树的递归与非递归遍历(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;

}

填写下面表单即可预约申请免费试听java课程!害怕学不会?助教陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

java课程免费学习,高薪触手可得

地区:

北京

天津

上海

江苏

浙江

山东

江西

安徽

广东

广西

海南

辽宁

吉林

黑龙江

内蒙古

山西

福建

河南

河北

湖南

湖北

四川

重庆

云南

贵州

新疆

西藏

陕西

青海

宁夏

甘肃

姓名:

手机:

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;

}

}

遍历二叉树

/** 二叉树遍历 */

public class BinTree {

protected BTNode root;

public BinTree(BTNode root) {

this.root = root;

}

public BTNode getRoot() {

return root;

}

/** 构造树 */

public static BTNode init() {

BTNode a = new BTNode('A');

BTNode b = new BTNode('B', null, a);

BTNode c = new BTNode('C');

BTNode d = new BTNode('D', b, c);

BTNode e = new BTNode('E');

BTNode f = new BTNode('F', e, null);

BTNode g = new BTNode('G', null, f);

BTNode h = new BTNode('H', d, g);

return h;// root

}

/** 访问节点 */

public static void visit(BTNode p) {

System.out.print(p.getKey() + " ");

}

/** 递归实现前序遍历 */

protected static void preorder(BTNode p) {

if (p != null) {

visit(p);

preorder(p.getLeft());

preorder(p.getRight());

}

}

/** 递归实现中序遍历 */

protected static void inorder(BTNode p) {

if (p != null) {

inorder(p.getLeft());

visit(p);

inorder(p.getRight());

}

}

/** 递归实现后序遍历 */

protected static void postorder(BTNode p) {

if (p != null) {

postorder(p.getLeft());

postorder(p.getRight());

visit(p);

}

}

/** 非递归实现前序遍历 */

protected static void iterativePreorder(BTNode p) {

Stack stack = new Stack();

if (p != null) {

stack.push(p);

while (!stack.empty()) {

p = stack.pop();

visit(p);

if (p.getRight() != null)

stack.push(p.getRight());

if (p.getLeft() != null)

stack.push(p.getLeft());

}

}

}

/** 非递归实现后序遍历 */

protected static void iterativePostorder(BTNode p) {

BTNode q = p;

Stack stack = new Stack();

while (p != null) {

// 左子树入栈

for (; p.getLeft() != null; p = p.getLeft())

stack.push(p);

// 当前节点无右子或右子已经输出

while (p != null && (p.getRight() == null || p.getRight() == q)) {

visit(p);

q = p;// 记录上一个已输出节点

if (stack.empty())

return;

p = stack.pop();

}

// 处理右子

stack.push(p);

p = p.getRight();

}

}

/** 非递归实现中序遍历 */

protected static void iterativeInorder(BTNode p) {

Stack stack = new Stack();

while (p != null) {

while (p != null) {

if (p.getRight() != null)

stack.push(p.getRight());// 当前节点右子入栈

stack.push(p);// 当前节点入栈

p = p.getLeft();

}

p = stack.pop();

while (!stack.empty() && p.getRight() == null) {

visit(p);

p = stack.pop();

}

visit(p);

if (!stack.empty())

p = stack.pop();

else

p = null;

}

}

public static void main(String[] args) {

BinTree tree = new BinTree(init());

System.out.print(" Pre-Order:");

preorder(tree.getRoot());

System.out.println();

System.out.print(" In-Order:");

inorder(tree.getRoot());

System.out.println();

System.out.print("Post-Order:");

postorder(tree.getRoot());

System.out.println();

System.out.print(" Pre-Order:");

iterativePreorder(tree.getRoot());

System.out.println();

System.out.print(" In-Order:");

iterativeInorder(tree.getRoot());

System.out.println();

System.out.print("Post-Order:");

iterativePostorder(tree.getRoot());

System.out.println();

}

}

输出结果

Pre-Order:H D B A C G F E

In-Order:B A D C H G E F

Post-Order:A B C D E F G H

Pre-Order:H D B A C G F E

In-Order:B A D C H G E F

Post-Order:A B C D E F G H

如果你现在想学习Java,赢取高薪工作机会,非常简单,填写下面信息,学好Java技术高薪工作机会唾手可得。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧农业是一种结合了现代信息技术,包括物联网、大数据、云计算等,对农业生产过程进行智能化管理和监控的新模式。它通过各种传感器和设备采集农业生产中的关键数据,如大气、土壤和水质参数,以及生物生长状态等,实现远程诊断和精准调控。智慧农业的核心价值在于提高农业生产效率,保障食品安全,实现资源的可持续利用,并为农业产业的转型升级提供支持。 智慧农业的实现依赖于多个子系统,包括但不限于设施蔬菜精细化种植管理系统、农业技术资料库、数据采集系统、防伪防串货系统、食品安全与质量追溯系统、应急追溯系统、灾情疫情防控系统、农业工作管理系统、远程诊断系统、监控中心、环境监测系统、智能环境控制系统等。这些系统共同构成了一个综合的信息管理和服务平台,使得农业生产者能够基于数据做出更加科学的决策。 数据采集是智慧农业的基础。通过手工录入、传感器自动采集、移动端录入、条码/RFID扫描录入、拍照录入以及GPS和遥感技术等多种方式,智慧农业系统能够全面收集农业生产过程中的各种数据。这些数据不仅包括环境参数,还涵盖了生长状态、加工保存、检验检疫等环节,为农业生产提供了全面的数据支持。 智慧农业的应用前景广阔,它不仅能够提升农业生产的管理水平,还能够通过各种应用系统,如库房管理、无公害监控、物资管理、成本控制等,为农业生产者提供全面的服务。此外,智慧农业还能够支持政府监管,通过发病报告、投入品报告、死亡报告等,加强农业产品的安全管理和质量控制。 面对智慧农业的建设和发展,存在一些挑战,如投资成本高、生产过程标准化难度大、数据采集和监测的技术难题等。为了克服这些挑战,需要政府、企业和相关机构的共同努力,通过政策支持、技术创新和教育培训等手段,推动智慧农业的健康发展。智慧农业的建设需要明确建设目的,选择合适的系统模块,并制定合理的设备布署方案,以实现农业生产的智能化、精准化和高效化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值