Weekly Contest 100的遞增順序查找樹,題目要求以下:code
給定一個樹, 按順序從新排列樹,使樹中最左邊的結點如今是樹的根,而且每一個結點沒有左子結點,只有一個右子結點。
示例 :遞歸
輸入:[5,3,6,2,4,null,8,1,null,null,null,7,9] 5 / \ 3 6 / \ \ 2 4 8 / / \ 1 7 9 輸出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9] 1 \ 2 \ 3 \ 4 \ 5 \ 6 \ 7 \ 8 \ 9
這道題解題步驟以下:leetcode
PS:我我的是把中序遍歷簡單記作左中右get
/** * 遞增順序查找樹 * * @param root * @return */ public TreeNode increasingBST(TreeNode root) { List<Integer> list = inorderTraversal(root); TreeNode result = new TreeNode(list.get(0)); TreeNode currentNode = result; for (int i = 1; i < list.size(); i++) { currentNode.right = new TreeNode(list.get(i)); currentNode = currentNode.right; } return result; } /** * 中序遍歷 * @param root * @return */ private List<Integer> inorderTraversal(TreeNode root) { List<Integer> list=new ArrayList<Integer>(); if(root!=null){ inorderTraversal(root,list); } return list; } /** * 中序遍歷時調用的遞歸方法 * @param root * @return */ private void inorderTraversal(TreeNode root,List<Integer> list){ if(root.left!=null){//遍歷左子樹 inorderTraversal(root.left,list); } list.add(root.val);//記錄根節點 if(root.right!=null){//遍歷右子樹 inorderTraversal(root.right,list); } }