java 二叉树遍历_二叉树的三种遍历方式(java实现)

public abstract class BSATree> {

protected BSTNode aRoot; // 根结点

/**

* 节点

*

* @timestamp Mar 5, 2016 2:48:29 PM

* @author smallbug

* @param

*/

protected class BSTNode {

E key; // 关键字(键值)

BSTNode left; // 左孩子

BSTNode right; // 右孩子

BSTNode parent; // 父结点

public BSTNode(E key, BSTNode parent, BSTNode left, BSTNode right) {

this.key = key;

this.parent = parent;

this.left = left;

this.right = right;

}

public BSTNode(E key, BSATree.BSTNode parent) {

super();

this.key = key;

this.parent = parent;

}

}

/**

* 创建二叉树

*

* @timestamp Mar 5, 2016 2:48:37 PM

*/

protected abstract void createBSTree();

/**

* 记录节点

*

* @timestamp Mar 5, 2016 2:49:07 PM

* @param key

*/

private void takeNode(T key) {

System.out.print(key + " ");

}

/**

* 前序遍历

*

* @timestamp Mar 5, 2016 2:48:44 PM

* @param node

*/

private void preOrder(BSTNode node) {

if (node != null) {

takeNode(node.key);

preOrder(node.left);

preOrder(node.right);

}

}

protected void preOrder() {

preOrder(aRoot);

}

/**

* 中序遍历

*

* @timestamp Mar 5, 2016 2:48:52 PM

* @param node

*/

private void inOrder(BSTNode node) {

if (node != null) {

inOrder(node.left);

takeNode(node.key);

inOrder(node.right);

}

}

protected void inOrder() {

inOrder(aRoot);

}

/**

* 后续遍历

*

* @timestamp Mar 5, 2016 2:51:19 PM

* @param node

*/

private void postOrder(BSTNode node) {

if (node != null) {

postOrder(node.left);

postOrder(node.right);

takeNode(node.key);

}

}

protected void postOrder() {

postOrder(aRoot);

}

}

实现:

public class BSTree extends BSATree {

@Override

public void createBSTree() {

aRoot = new BSTNode("A", null);

BSTNode bNode = new BSTNode("B", aRoot);

BSTNode cNode = new BSTNode("C", aRoot);

BSTNode dNode = new BSTNode("D", bNode);

BSTNode eNode = new BSTNode("E", bNode);

BSTNode fNode = new BSTNode("F", cNode);

BSTNode gNode = new BSTNode("G", cNode);

BSTNode hNode = new BSTNode("H", dNode);

BSTNode iNode = new BSTNode("I", dNode);

BSTNode jNode = new BSTNode("J", eNode);

BSTNode kNode = new BSTNode("K", fNode);

aRoot.left = bNode;

aRoot.right = cNode;

bNode.left = dNode;

bNode.right = eNode;

cNode.left = fNode;

cNode.right = gNode;

dNode.left = hNode;

dNode.right = iNode;

eNode.right = jNode;

fNode.right = kNode;

}

public static void main(String[] args) {

BSTree b = new BSTree();

b.createBSTree();

System.out.println("********************** 前序遍历 **********************");

b.preOrder();

System.out.println();

System.out.println("********************** 中序遍历 **********************");

b.inOrder();

System.out.println();

System.out.println("********************** 后序遍历 **********************");

b.postOrder();

System.out.println();

}

}

输出:

********************** 前序遍历 **********************

A B D H I E J C F K G

********************** 中序遍历 **********************

H D I B E J A F K C G

********************** 后序遍历 **********************

H I D J E B K F G C A

前序遍历:

2df589e265b8c23c3451e19724f35648.png

中序遍历:

c7ae8429cad167302d4b061135ca66cf.png

后序遍历:

58b25dfced0028fc12c502ff220ab13c.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值