1. 程式人生 > >遞增順序查詢樹 【leetcode - 897 - 簡單】

遞增順序查詢樹 【leetcode - 897 - 簡單】

文章優先發表在個人部落格

http://www.xdx97.com/#/single?bid=a31d54d3-7d11-f347-8ffa-75f91fbefc11

 

    胡扯:之前吐槽的 leetcode 使用全域性變數的問題,應該是我操作的問題。java還是可以使用全域性變數的,只要 別在全域性變數前面加上 static 就好了。從本題開始,堅持每道題都寫一篇簡短的文章。

原題位置 :https://leetcode-cn.com/problems/increasing-order-search-tree/

思路:

    1、首先把樹進行 中序遍歷,可以使用 ArrayList 按照中序的順序存起來。 關於三種遍歷檢視  

三種遍歷

    2、然後再去迴圈陣列把一個個結點拼接起來。

    3、我最開始沒有用 集合,用的是 String 把每一個數字拼接起來,這樣後期有個問題就是字元變成數字設計ascii 的問題。其實除了這個還有一個重要的問題,就是如果數字是  222,它會分成三個字元,這明顯就錯了. 所以使用集合是最好的。

    4、在 刷題的時候,  第一步總是來個 非空 判斷。

 

程式碼一 (擊敗百分之 20的人)

class Solution {

    List<Integer> list = new ArrayList<>();
    void dfs (TreeNode root){

        if( root.left != null)
            dfs(root.left);
        list.add(root.val);
        if( root.right != null )
            dfs( root.right );
        return ;
    }

    public TreeNode increasingBST(TreeNode root) {


        if(root == null)
            return root;

        dfs(root);
        TreeNode head = new TreeNode( list.get(0) );
        list.remove(0);
        TreeNode head1 = head;
        for(Integer i : list){
            head.left = null;
            TreeNode tem = new TreeNode(i);
            head.right = tem;
            head = tem;
        }

        return head1;
    }
}

程式碼二(思路和上面的基本一樣,簡單的優化了一下,打敗了 百分之70的人)

class Solution {
    
    TreeNode head = new TreeNode(-1);
    TreeNode head1 = head;
    
    void dfs (TreeNode root){
        
        if( root.left != null)
            dfs(root.left);
        
        head.left = null;
        TreeNode tem = new TreeNode(root.val);
        head.right = tem;
        head = tem;
        
        if( root.right != null )
            dfs( root.right );
        return ;
    }
    
    public TreeNode increasingBST(TreeNode root) {
        
        if(root == null)
            return root;
        dfs(root);                 
        return head1.right;
    }
}