二叉树的先序、中序、后序和中序遍历——Java实现
来源:互联网 发布:hex editor怎么修改mac 编辑:程序博客网 时间:2024/06/05 15:49
package treeTraverse;/** * 定义一个树的结点类 */public class Node { private int data; private Node leftChild; private Node rightChild; public Node(){ } public Node(int data) { super(); this.data = data; } public int getData() { return data; } public void setData(int data) { this.data = data; } public Node getLeftChild() { return leftChild; } public void setLeftChild(Node leftChild) { this.leftChild = leftChild; } public Node getRightChild() { return rightChild; } public void setRightChild(Node rightChild) { this.rightChild = rightChild; } }package treeTraverse;import java.util.ArrayList;import java.util.List;/** * 实现树的先、中、后及层次遍历 */public class FindTree { private void visit(int data){ System.out.print(data + "-->"); } //先序遍历 public void preOrder(Node root){ if(root == null) return ; visit(root.getData()); preOrder(root.getLeftChild()); preOrder(root.getRightChild()); } //中序遍历 public void inOrder(Node root){ if(root == null) return ; inOrder(root.getLeftChild()); visit(root.getData()); inOrder(root.getRightChild()); } //后序遍历 public void afterOrder(Node root){ if(root == null) return ; afterOrder(root.getLeftChild()); afterOrder(root.getRightChild()); visit(root.getData()); } /** * 层次遍历(非递归) * 思路: * 现将二叉树头结点入队列,然后出队列,访问该结点, * 如果它有左子树,则将左子树根节点入队; * 如果它有右子树,则将右子树根节点入队; * 然后出队列,对出队列的结点访问,如此反复,知道队列为空。 */ public void levelOrder(Node root){ List<Node> queue = new ArrayList<Node>(); if(root != null){ queue.add(root);//将根结点入队 while(queue.size() != 0){//当队列不空的时候进行循环 Node q = queue.remove(0);//出队列 返回从列表中移除的元素 visit(q.getData());//访问该结点 if(q.getLeftChild() != null){//如果它有左子树,则将左子树根节点入队; queue.add(q.getLeftChild()); } if(q.getRightChild() != null){//如果它有右子树,则将右子树根节点入队; queue.add(q.getRightChild()); } } } }}package treeTraverse;/** * 构建一个二叉树排序树并测试 */public class TestTree { public static void main(String[] args) { FindTree ft = new FindTree(); int[] array = {12,76,35,22,16,48,90,46,9,40,90}; Node root = new Node(array[0]); for(int i = 1; i < array.length; i++){ insert(root, array[i]); } System.out.println("preorder:"); ft.preOrder(root); System.out.println("\n"+"inorder:"); ft.inOrder(root); System.out.println("\n"+"afterorder:"); ft.afterOrder(root); System.out.println("\n"+"levelOrder:"); ft.levelOrder(root); } /** * 构造二叉排序树, 性质如下: * 若它的左子树不空,则左子树上所有关键字的值均小于根关键字的值 * 若它的右子树不空,则右子树上所有关键字的值均小于根关键字的值 * 如果输出二叉树排序树的中序遍历,则这个序列是递增有序的 * @param root * @param data */ private static void insert(Node root, int data) { if(root.getData() < data){ if(root.getRightChild() == null){ root.setRightChild(new Node(data)); }else{ insert(root.getRightChild(), data); } }else { if(root.getData() > data){ if(root.getLeftChild() == null){ root.setLeftChild(new Node(data)); }else{ insert(root.getLeftChild(), data); } } } } } 遍历结果:preorder:12-->9-->76-->35-->22-->16-->48-->46-->40-->90-->inorder:9-->12-->16-->22-->35-->40-->46-->48-->76-->90-->afterorder:9-->16-->22-->40-->46-->48-->35-->90-->76-->12-->levelOrder:12-->9-->76-->35-->90-->22-->48-->16-->46-->40-->
阅读全文
0 0
- 二叉树的先序、中序、后序和中序遍历——Java实现
- java实现二叉树的先序遍历,中序遍历,后序遍历
- Java实现——根据先序遍历和中序遍历,确定二叉树
- Java实现二叉树,以及先序、中序、后序遍历算法的实现
- 二叉树的先序、中序、后序遍历的递归和非递归实现
- java实现二叉树的先序、中序、后序遍历
- Java实现二叉树的先序、中序、后序、层级遍历
- Java实现二叉树的先序、中序、后序、层级遍历
- 建立二叉树,实现二叉树的先序遍历、中序和后序遍历的非递归算法
- C实现二叉树的先序遍历,中序遍历,后序遍历
- c语言实现二叉树的先序遍历,中序遍历,后序遍历
- 二叉树T 的先序遍历、中序遍历、后序遍历(递归实现)
- 实现二叉树的先序遍历、中序遍历、后序遍历
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- 二叉树的建树、遍历(先序、中序、后序、层次)(递归和非递归)--Java实现
- JAVA版二叉树的先序、中序、后序和层次遍历
- 代码实现 由二叉树的先序遍历和中序遍历推出后序遍历
- 技术分析之Hibernate的关联关系映射之多对多映射
- 二叉树的镜像
- Codeforces Round #435 (Div. 2)-Mahmoud and Ehab and the xor(异或)
- scanf输入字符和数字的问题
- 频道管理配置
- 二叉树的先序、中序、后序和中序遍历——Java实现
- 数据结构第三周项目二
- uboot-Makefile分析
- Python 继承
- Eclipse+CDT编写C程序,eclipse新建项目添加到编译选项及其配置
- bzoj4552 [ TJOI2016 && HEOI2016 ] -- 二分+线段树
- 线程池之饱和策略
- jQuery
- Spring之自动装配