LCR 052. 遞增順序搜索樹
給你一棵二叉搜索樹,請 按中序遍歷 將其重新排列為一棵遞增順序搜索樹,使樹中最左邊的節點成為樹的根節點,并且每個節點沒有左子節點,只有一個右子節點。
示例 1:
輸入:root = [5,3,6,2,4,null,8,1,null,null,null,7,9]
輸出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]
示例 2:
輸入:root = [5,1,7]
輸出:[1,null,5,null,7]
提示:
樹中節點數的取值范圍是 [1, 100]
0 <= Node.val <= 1000
題解:
本題對所給二叉樹中序遍歷即可,即按照左根右,當訪問根時,創建節點即可;
注意因為Java中創建對象和創建變量不同,創建同樣名字的變量會導致上次創建的變量沒有東西做依準故找不到,而創建對象會分配地址因此即使創建同樣名字的對象也可通過地址找到;
代碼:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {TreeNode res = null;TreeNode index = null;public TreeNode increasingBST(TreeNode root) {dfs(root);return res;}public void dfs(TreeNode node){if(node.left != null)dfs(node.left);if(res == null){res = new TreeNode();res.val = node.val;index = res;}else{TreeNode temp = new TreeNode();temp.val = node.val;index.right = temp;index = index.right;}if(node.right != null)dfs(node.right);}
}