經典的面試題目,思路是遞迴中序遍曆,每次遞迴返回linked list中最後的一個元素lastNode,每次遞迴調用過程中要接受lastNode作為參數,因為是中序遍曆,所以將lastNode作為參數傳進去之後,總是先訪問到最小的node。
代碼如下 In Java:
class BinaryTreeNode {BinaryTreeNode left; // previousBinaryTreeNode right; // nextint 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;}
默寫幾遍吧。。