线索化二叉查找树 java实现
2014-02-21 15:13
645 查看
package TreadTree; class Node{ int data; Node left; boolean lthread; Node right; boolean rthread; public Node(){ left=null; right=null; lthread=false; rthread=false; } } public class ThreadTree { public static Node getMostLeft(Node tree){ Node p=tree; Node q=tree.left; while(q!=null){ p=q; q=p.left; } return p; } public static Node getMostRight(Node tree){ Node p=tree; Node q=tree.right; while(q!=null){ p=q; q=p.right; } return p; } public static Node getPos(Node tree,int data){ Node p=tree; Node q=null; if(data>p.data){ q=p.right; }else{ q=p.left; } while(q!=null){ p=q; if(data>p.data){ q=p.right; }else{ q=p.left; } } return p; } public static Node createTree(int[] datas){ Node tree=new Node(); tree.data=datas[0]; for(int i=1;i<datas.length;i++){ Node added=new Node(); added.data=datas[i]; Node pos=getPos(tree,datas[i]); if(datas[i]>pos.data){ pos.right=added; }else{ pos.left=added; } } return tree; } public static void ordinaryViewTree(Node tree){ if(tree.left!=null){ ordinaryViewTree(tree.left); } System.out.println(tree.data); if(tree.right!=null){ ordinaryViewTree(tree.right); } } public static void viewTree(Node tree){ Node p=tree; while(p!=null){ while(p.left!=null){ p=p.left; } while(p.rthread==true){ System.out.println(p.data); p=p.right; } p=p.right; } } public static Node trans(Node tree){ Node p=null;//记录链表头; p=getMostLeft(tree); if(tree.left!=null){ Node rightNode=getMostRight(tree.left); trans(tree.left); rightNode.right=tree; rightNode.rthread=true; } if(tree.right!=null){ Node leftNode=getMostLeft(tree.right); trans(tree.right); leftNode.left=tree; leftNode.lthread=true; } return p; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String[] dataList = args[0].split(","); int[] datas = new int[dataList.length]; for (int i = 0; i < dataList.length; i++) { datas[i] = Integer.parseInt(dataList[i]); } Node tree=createTree(datas); ordinaryViewTree(tree); Node p=trans(tree); System.out.println("list is:"); while(p!=null){ System.out.println(p.data); p=p.right; } } }
相关文章推荐
- 二叉查找树的java实现
- Java基于二叉查找树实现排序功能示例
- java实现二叉查找树
- 二叉查找树--查找、删除、插入(Java实现)
- 二叉查找树Java实现
- 二叉查找树Java实现
- 数据结构笔记--二叉查找树概述以及java代码实现
- 数据结构学习笔记之Java实现二叉查找树
- 二叉查找树Java实现
- 算法导论15.5最优二叉查找树实现(Java语言)
- Java实现二叉查找树
- 二叉查找树 Java实现
- Java 实现二叉查找树
- Java实现二叉查找树
- java 二叉查找树(搜索树、排序树)实现
- 二叉查找树转双向链表JAVA实现
- 二叉查找树Java实现
- 二叉树---(2)二叉查找树之Java实现
- 二叉查找树(二叉排序树)Java实现
- 浅析数据结构与算法7--二叉查找树 及Java实现