经典的面试题目,思路是递归中序遍历,每次递归返回linked list中最后的一个元素lastNode,每次递归调用过程中要接受lastNode作为参数,因为是中序遍历,所以将lastNode作为参数传进去之后,总是先访问到最小的node。
代码如下 In Java:
class BinaryTreeNode {
BinaryTreeNode left; // previous
BinaryTreeNode right; // next
int value;
}
BinaryTreeNode buildList(BinaryTreeNode root) {
BinaryTreeNode lastNode = buildListRecursively(root, null);
if (lastNode == null)
return null;
BinaryTreeNode head = lastNode;
While(head.left != null) {
head = head.left;
return head;
}
BinaryTreeNode buildListRecursively(BinaryTreeNode root, BinaryTreeNode lastNode) {
if (root == null)
return null;
if (root.left != null) //Here we need to check if child is null or not, if it is null, then we don't need to update the lastNode.
lastNode = buildListRecursively(root.left, lastNode);
root.left = lastNode;
if (lastNode != null) //Always check a reference if it is null before using it.
lastNode.right = root;
lastNode = root;
if (root.right != null)//Here we need to check if child is null or not, if it is null, then we don't need to update the lastNode.
lastNode = buildListRecursively(root.right, lastNode);
return lastNode;
}
默写几遍吧。。