遞增順序查詢樹 【leetcode - 897 - 簡單】
阿新 • • 發佈:2019-01-06
文章優先發表在個人部落格
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; } }