【解题思路】
首先对二叉树中的节点进行中序遍历,将节点的数据存储在顺序列表list中。然后将顺序列表中的数据按照单向链表的形式组织起来,最后将单向链表连接为双向链表。
/*
// Definition for a Node.
class Node {
public int val;
public Node left;
public Node right;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val,Node _left,Node _right) {
val = _val;
left = _left;
right = _right;
}
};
*/
class Solution {
public Node treeToDoublyList(Node root) {
ArrayList<Integer> list = new ArrayList<Integer>();
search(root, list);
Node head = new Node(0), p = head;
for(int i = 0; i < list.size(); i++)
{
Node q = new Node(list.get(i));
p.right = q;
p = q;
q.right = null;
}
head = head.right;
p = head;
while(p != null)
{
Node q = p.right;
if(q == null)
{
head.left = p;
p.right = head;
break;
}
else
{
q.left = p;
}
p = p.right;
}
return head;
}
public void search(Node node, ArrayList<Integer> list)
{
if(node == null) return;
search(node.left, list);
list.add(node.val);
search(node.right, list);
}
}