输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
代码:
package offer;
 class BineryTreeNode
 {
     int val;
     BineryTreeNode left = null;
     BineryTreeNode right = null;
     BineryTreeNode(int val)
     {
         this.val = val;
     }
 }
 public class ti36 {
      private static BineryTreeNode pre = null; //保存当前节点的前一个节点
         private static BineryTreeNode head = null;//保存链表的头结点
         public static BineryTreeNode Convert(BineryTreeNode pRootOfTree) {
             if(pRootOfTree==null) return null;
             inOrder(pRootOfTree);
             return head;
         }
         private static void inOrder(BineryTreeNode node) {
             if (node == null) return;
             System.out.println(node.val);
             inOrder(node.left);
             node.left = pre;
             if (pre != null)  pre.right = node;
             pre = node;
             if (head == null) head = node;
             inOrder(node.right);
         }
     public static void main(String[] args)
     {
         /*BineryTreeNode a = new BineryTreeNode(10);
         BineryTreeNode b = new BineryTreeNode(6);
         BineryTreeNode c = new BineryTreeNode(14);
         BineryTreeNode d = new BineryTreeNode(4);
         BineryTreeNode e = new BineryTreeNode(8);
         BineryTreeNode f = new BineryTreeNode(12);
         BineryTreeNode g = new BineryTreeNode(16);
         a.left = b;
         a.right = c;
         b.left = d;
         b.right = e;
         c.left = f;
         c.right = g;*/
         BineryTreeNode a = new BineryTreeNode(4);
         BineryTreeNode b = new BineryTreeNode(2);
         BineryTreeNode c = new BineryTreeNode(5);
         BineryTreeNode d = new BineryTreeNode(1);
         BineryTreeNode e = new BineryTreeNode(3);
         a.left = b;
         a.right = c;
         b.left = d;
         b.right = e;
         BineryTreeNode result = Convert(a);
     }
 }