浏览 4319 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (4)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-10
最后修改:2009-12-10
简单的排序二叉树 package com.wz.util.tree; import java.util.ArrayList; import java.util.Iterator; /** * 排序二叉树 * * @author NumbCoder * */ // 节点 class BinaryNode { private int data; BinaryNode lChild; BinaryNode rChild; BinaryNode(int t) { setData(t); lChild = null; rChild = null; } // 是否为叶子节点 public boolean isLeaf() { if (lChild == null && rChild == null) return true; else return false; } public void setData(int data) { this.data = data; } public int getData() { return data; } } // 树 public class BinaryTree { private BinaryNode root; BinaryTree(BinaryNode root) { this.root = root; root.lChild = null; root.rChild = null; } // 向二叉树中插入一个节点 public void insert(BinaryNode n) { // 树是空的 if (root == null) root = n; else { BinaryNode current = root; BinaryNode parentNode; boolean flag = true; while (flag) { parentNode = current; if (n.getData() > current.getData()) { // 要插入的节点为右孩子节点 current = current.rChild; if (current == null) { parentNode.rChild = n; flag = false; } } else if (n.getData() < current.getData()) { current = current.lChild; // 要插入的节点为左孩子节点 if (current == null) { parentNode.lChild = n; flag = false; } } } } } // 传入一个裝有节点的ArrayList便可自动生成一棵排序二叉树 public void creatBinaryTree(BinaryNode root, ArrayList<BinaryNode> aList) { Iterator<BinaryNode> it = aList.iterator(); while (it.hasNext()) { insert(it.next()); } } // 先序遍历 public void preOrder(BinaryNode t) { if (t != null) { System.out.println(t.getData()); preOrder(t.lChild); preOrder(t.rChild); } } // 中序遍历 public void inOrder(BinaryNode t) { if (t != null) { inOrder(t.lChild); System.out.println(t.getData()); inOrder(t.rChild); } } // 后序遍历 public void postOrder(BinaryNode t) { if (t != null) { postOrder(t.lChild); postOrder(t.rChild); System.out.println(t.getData()); } } } 泛型的排序二叉树(因为是排序的,所以节点必须具有可比性,但具体的比较规则自己定) package com.wz.util; import java.util.ArrayList; import java.util.Iterator; /** * 带泛型的排序二叉树 * * @author NumbCoder * */ class BinaryNode<T> implements Comparable<T> { private T data; BinaryNode<T> lChild; BinaryNode<T> rChild; BinaryNode(T t) { setData(t); lChild = null; rChild = null; } /** * 根据T的类型自定义比较方法小于、等于或大于n分别返回负-1、0或1 * 必须实现具体compareTo方法 */ @Override public int compareTo(T t) { return 0; } public void setData(T data) { this.data = data; } public T getData() { return data; } //是否为叶子节点 public boolean isLeaf() { if (lChild == null && rChild == null) return true; else return false; } } //树 public class BinaryTree<T> { private BinaryNode<T> root; BinaryTree(BinaryNode<T> root) { this.root = root; root.lChild = null; root.rChild = null; } // 向二叉树中插入一个节点 public void insert(BinaryNode<T> n) { // 树是空的 if (root == null) root = n; else { BinaryNode<T> current = root; BinaryNode<T> parentNode; boolean flag = true; while (flag) { parentNode = current; if (n.compareTo(current.getData()) == 1) { // 要插入的节点为右孩子节点 current = current.rChild; if (current == null) { parentNode.rChild = n; flag = false; } } else if( n.compareTo(current.getData()) == -1){ current = current.lChild; // 要插入的节点为左孩子节点 if (current == null) { parentNode.lChild = n; flag = false; } } } } } // 生成一棵排序二叉树 public void creatBinaryTree(BinaryNode<T> root, ArrayList<BinaryNode<T>> aList) { Iterator<BinaryNode<T>> it = aList.iterator(); while (it.hasNext()) { insert(it.next()); } } // 先序遍历 private void preOrder(BinaryNode<T> t, ArrayList<T> list) { if (t != null) { list.add(t.getData()); preOrder(t.lChild, list); preOrder(t.rChild, list); } } public Iterator<T> itPreOrder() { ArrayList<T> list = new ArrayList<T>(); preOrder(root, list); return list.iterator(); } // 中序遍历 private void inOrder(BinaryNode<T> t, ArrayList<T> list) { if (t != null) { inOrder(t.lChild, list); list.add(t.getData()); inOrder(t.rChild, list); } } public Iterator<T> itInOrder() { ArrayList<T> list = new ArrayList<T>(); inOrder(root, list); return list.iterator(); } // 后序遍历 private void postOrder(BinaryNode<T> t, ArrayList<T> list) { if (t != null) { postOrder(t.lChild, list); postOrder(t.rChild, list); list.add(t.getData()); } } public Iterator<T> itPostOrder() { ArrayList<T> list = new ArrayList<T>(); postOrder(root, list); return list.iterator(); } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |