思路是我创建一个方法,能够返回一个只有两个结点的数组,第一个结点是头,第二个结点是尾,已经完成了互联操作。我再将首尾进行连接就好了。
public class Solution{
public Node treeToDoublyList(Node root) {
if (root == null) return null;
Node[] tmp = method(root);
tmp[0].left = tmp[1];
tmp[1].right = tmp[0];
return tmp[0];
}
/**
* 这个方法,能够返回一个只有两个结点的数组,
* 结点的第一个元素是排序好的头结点,第二个元素是尾结点
* 并且已经完成了互联操作。
*
* @param root
* @return
*/
public Node[] method(Node root) {
if (root.left == null && root.right == null) {
return new Node[]{root, root};
}
if (root.left == null) {
Node[] tmp = method(root.right);
root.right = tmp[0];
tmp[0].left = root;
return new Node[]{root, tmp[1]};
}
if (root.right == null) {
Node[] tmp = method(root.left);
root.left = tmp[1];
tmp[1].right = root;
return new Node[]{tmp[0], root};
}
Node[] tmp_left = method(root.left);
Node[] tmp_right = method(root.right);
root.left = tmp_left[1];
tmp_left[1].right = root;
root.right = tmp_right[0];
tmp_right[0].left = root;
return new Node[]{tmp_left[0], tmp_right[1]};
}
}