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

[Java算法分析与设计]二叉树的遍历

2017-07-13 16:32 597 查看
设计Node节点类:

package com.chen.arithmetic_test.BiTree_test;

/**
* Created by ChenMP on 2017/7/13.
*/
public class BiTreeNode {
private Object data;
private BiTreeNode leftChild;
private BiTreeNode rightChild;

public BiTreeNode() {
}

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

public BiTreeNode(Object data, BiTreeNode leftChild, BiTreeNode rightChild) {
this.data = data;
this.leftChild = leftChild;
this.rightChild = rightChild;
}

public Object getData() {
return data;
}

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

public BiTreeNode getLeftChild() {
return leftChild;
}

public void setLeftChild(BiTreeNode leftChild) {
this.leftChild = leftChild;
}

public BiTreeNode getRightChild() {
return rightChild;
}

public void setRightChild(BiTreeNode rightChild) {
this.rightChild = rightChild;
}
}


设计二叉树的遍历实现:

package com.chen.arithmetic_test.BiTree_test;

import java.util.LinkedList;
import java.util.Queue;

/**
* Created by ChenMP on 2017/7/13.
*/
public class Traverse {

//前序遍历
public static void preOrder(BiTreeNode root) {
if (root != null) {
System.out.print("_" + root.getData()); //打印根节点
if (root.getLeftChild() != null)
preOrder(root.getLeftChild()); //左子节点递归
if (root.getRightChild() != null)
preOrder(root.getRightChild()); //右子节点递归
}
}

//中序遍历
public static void inOrder(BiTreeNode root) {
if (root != null) {
if (root.getLeftChild() != null)
inOrder(root.getLeftChild()); //左子节点递归
System.out.print("_" + root.getData()); //打印根节点
if (root.getRightChild() != null)
inOrder(root.getRightChild()); //右子节点递归
}
}

//后序遍历
public static void postOrder(BiTreeNode root) {
if (root != null) {
if (root.getLeftChild() != null)
postOrder(root.getLeftChild()); //左子节点递归
if (root.getRightChild() != null)
inOrder(root.getRightChild()); //右子节点递归
System.out.print("_" + root.getData()); //打印根节点
}
}

//层序遍历
public static void levOrder(BiTreeNode root) {
Queue<BiTreeNode> queue = new LinkedList<BiTreeNode>();

if (root == null)
return ;

BiTreeNode curr;
queue.add(root);

while(!queue.isEmpty()) {
curr = queue.remove(); //获取顺序表第一位节点
System.out.print("_" + curr.getData());
if (curr.getLeftChild() != null)
queue.add(curr.getLeftChild());
if (curr.getRightChild() != null)
queue.add(curr.getRightChild());
}

}
}


设计测试类

package com.chen.arithmetic_test.BiTree_test;

/**
* Created by ChenMP on 2017/7/13.
*/
public class Test {

/**二叉树形
*                      A
*               B                 C
*       D                   E            F
*           G
*        H     I
*/
public static BiTreeNode makeTree() {
BiTreeNode b,c,d,e,f,g,h,i;
i = new BiTreeNode(new Character('I'), null, null);
h = new BiTreeNode(new Character('H'), null, null);
g = new BiTreeNode(new Character('G'), h, i);
d = new BiTreeNode(new Character('D'), null, g);
b = new BiTreeNode(new Character('B'), d, null);
e = new BiTreeNode(new Character('E'), null, null);
f = new BiTreeNode(new Character('F'), null, null);
c = new BiTreeNode(new Character('C'), e, f);
return new BiTreeNode(new Character('A'), b, c);
}

public static void main(String[] args) {
BiTreeNode root = Test.makeTree();

System.out.println("前序遍历:");
Traverse.preOrder(root);
System.out.println("\n中序遍历:");
Traverse.inOrder(root);
System.out.println("\n后序遍历:");
Traverse.postOrder(root);
System.out.println("\n层序遍历");
Traverse.levOrder(root);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 二叉树 java算法