如何搜索二叉树转换为双向链表

来源:互联网 发布:java垃圾回收机制 英文 编辑:程序博客网 时间:2024/05/29 09:57
public static class Node{public int value;public Node left;public Node right;public Node(int data){this.value = data;}}public static Node convert1(Node head){Queue<Node> queue = new LinkedList<Node>();inOrderToQueue(head, queue);if(queue.isEmpty()){return head;}head = queue.poll();Node pre = head;pre.left = null;Node cur = null;while(!queue.isEmpty()){cur = queue.poll();pre.right = cur;cur.left = pre;pre = cur;}pre.right = null;return head;}public static void inOrderToQueue(Node head, Queue<Node> queue){if(head == null){return;}inOrderToQueue(head.left, queue);queue.offer(head);inOrderToQueue(head.right, queue);}public static Node convert2(Node head){if(head == null){return null;}Node last = process(head);head = last.right;last.right = null;return head;}public static Node process(Node head){if(head == null){return null;}Node leftE = process(head.left);//left endNode rightE = process(head.right);//right endNode leftS = leftE != null ? leftE.right : null;//left startNode rightS == rightS != null ? rightE.right : null; //right startif(leftE != null && rightE != null){leftE.right = head;head.left = leftE;head.right = rightS;rightS.left = head;rightE.right = leftS;return rightE;}else if(leftE != null){leftE.right = head;head.left = leftE;head.right = leftS;return head;}else if(rightE != null){head.right = rightS;rightS.left = head;rightE.right = head;return rightE;}else{head.right = head;return head;}}