- class IntThreadedTreeNode {
- protected int key;
- protected boolean hasSuccessor;
- protected IntThreadedTreeNode left, right;
- public IntThreadedTreeNode() {
- left = right = null; hasSuccessor = false;
- }
- public IntThreadedTreeNode(int el) {
- this(el,null,null);
- }
- public IntThreadedTreeNode(int el, IntThreadedTreeNode lt,
- IntThreadedTreeNode rt) {
- key = el; left = lt; right = rt; hasSuccessor = false;
- }
- }
-
- public class IntThreadedTree {
- private IntThreadedTreeNode root;
- public IntThreadedTree() {
- root = null;
- }
- protected void visit(IntThreadedTreeNode p) {
- System.out.print(p.key + " ");
- }
-
-
-
-
- public void threadedInsert(int el) {
- IntThreadedTreeNode newNode = new IntThreadedTreeNode(el);
- if (root == null) {
- root = newNode;
- return;
- }
- IntThreadedTreeNode p = root, prev = null;
- while (p != null) {
- prev = p;
- if (el < p.key)
- p = p.left;
- else if (!p.hasSuccessor)
- p = p.right;
- else break;
- }
- if (el < prev.key) {
- prev.left = newNode;
- newNode.hasSuccessor = true;
- newNode.right = prev;
- }
- else if (prev.hasSuccessor) {
- newNode.hasSuccessor = true;
- prev.hasSuccessor = false;
- newNode.right = prev.right;
- prev.right = newNode;
- }
- else prev.right = newNode;
- }
-
-
-
-
- protected void threadedInorder() {
- IntThreadedTreeNode prev = null, p = root;
- if (p != null) {
- while (p.left != null)
- p = p.left;
- while (p != null) {
- visit(p);
- prev = p;
- p = p.right;
- if (p != null && !prev.hasSuccessor)
- while (p.left != null)
- p = p.left;
- }
- }
- }
-
-
-
-
- protected void threadedInorderPlus() {
- IntThreadedTreeNode prev = null, p = root;
-
- while (p != null) {
- if (p.left != null) {
- p = p.left;
- } else {
- visit(p);
- prev = p;
- p = p.right;
- if (prev.hasSuccessor) {
- visit(p);
- p = p.right;
- }
- }
- }
- }
-
- public static void testThreadedInorderPlus() {
- IntThreadedTree tree = new IntThreadedTree();
- int[] array = {4, 2, 6, 1, 3, 5, 7, };
- for (int el : array) {
- tree.threadedInsert(el);
- }
- tree.threadedInorder();
- }
-
- public static void main(String[] args) {
- testThreadedInorderPlus();
- }
- }
|