题解 | #二叉搜索树与双向链表#
二叉搜索树与双向链表
https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5
import java.util.*;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public TreeNode Convert(TreeNode root) {
if (root == null) {
return null;
}
List<TreeNode> list = inOrder(root);
TreeNode head = list.get(0);
head.left = null;
TreeNode pre = head;
for (int i = 1; i < list.size(); i++) {
TreeNode cur = list.get(i);
pre.right = cur;
cur.left = pre;
pre = cur;
}
list.get(list.size() - 1).right = null;
return head;
}
private List<TreeNode> inOrder(TreeNode root) {
List<TreeNode> res = new ArrayList<>();
if (root == null) {
return res;
}
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
while (!stack.isEmpty() || cur != null) {
if (cur != null) {
stack.push(cur);
cur = cur.left;
} else {
cur = stack.pop();
res.add(cur);
cur = cur.right;
}
}
return res;
}
}

360集团公司福利 432人发布