[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算法分析与设计]中序线索化二叉树
- Java算法分析与设计视频教程
- 三杯水问题 算法分析、设计与实现(Java)
- Java遍历集合方法分析(实现原理、算法性能、适用场合)
- 用java代码实现二叉树的遍历算法
- java关于迭代器的分析...设计更通用的容器遍历方法
- 【算法设计-二叉树遍历】二叉树的递归与非递归遍历方法
- 算法:二叉树的先序遍历、中序遍历、后序遍历(递归及非递归方式)的java代码实现
- 【LeetCode-面试算法经典-Java实现】【103-Binary Tree Zigzag Level Order Traversal(二叉树分层Z字形遍历)】
- Java遍历集合方法分析(实现原理、算法性能、适用场合)
- 实战应用Java算法分析与设计视频教程
- Java实战应用视频教程之Java算法分析与设计
- Java实现二叉树三种遍历算法
- java二叉树的遍历算法
- 二叉树采用二叉链表结构表示。设计并实现如下算法:后序递归建树,先序非递归遍历该树。
- 【数据结构和算法分析】二叉树的遍历
- 算法设计、分析与实现 从入门到精通 C、C++和Java 这本书的堆实现85页C++语言实现有问题
- java二叉树的遍历算法
- Java遍历集合的几种方法分析(实现原理、算法性能、适用场合)