原创 leetcode--RecoverBinarySearchTree

思路:BST中序遍歷生成從小到大的排序數組,如果交換兩個節點,相當於交換了數組中的兩個數字。我們只要找出中序遍歷中不符合排序順序的兩個數字即可。可以利用指針pre記錄前一個節點,當後節點小於前節點時有問題。注意當交換的是相鄰的兩個數字時只

原创 leetcode--ConvertSortedListtoBinarySearchTree

思路:如果用數組可以直接取到中間值,因此可以用前序遍歷的順序來構建BST。但是鏈表如果要取中間值需要n/2的時間,因此採用中序遍歷的順序來構建BST。 這樣root生成的順序就和中序遍歷的順序一樣,也就是list從前往後的順序。 impo

原创 leetcode--BinaryTreePostorderTraversal

思路:如果按照後序遍歷將節點放入list,什麼時候當前節點可以放入list?當左右子節點都爲空或者左右子節點都已經放入list的時候,左右子節點都已經放入list又可以分情況討論進行簡化 1右節點爲空,左節點放入list 2左節點爲空,右

原创 leetcode--BinaryTreeInorderTraversal

二叉樹中序遍歷非遞歸實現: 利用兩層循環以及stack,第一層循環代替總的遞歸過程,第二個循環代替先序遍歷時逐層向下訪問左節點。第一層循環用stack爲空作爲控制條件,第二層循環當前節點沒有左節點就結束了。 public List<Int

原创 leetcode--BinaryTreePreorderTraversal

思路:同InorderTraversal,利用兩層while循環,外層代表總的遞歸,裏層while代表不斷尋找左子節點的過程,因爲是前序遍歷,將add操作放在內層while就好了。 import java.util.LinkedList;

原创 leetcode--SurroundedRegions

思路:利用bfs先把所有和最外層O連通的O標記,然後遍歷所有點,沒被標記的O就是被X包圍的內層點 import java.util.LinkedList; import java.util.Queue; /** * Created b

原创 leetcode--樹的序列化與反序列化

序列化:利用隊列,先將根節點放在隊列中,然後從隊列中poll節點出來在把左子節點和右子節點放入隊列中。循環至隊列爲空。 反序列化:也是使用隊列 <pre style="background-color: rgb(255, 255, 25

原创 leetcode--BinaryTreeMaximumPathSum

思路:在能夠遍歷所有節點的遞歸中嵌套對於該節點延伸出的最長路徑的計算,然後利用類變量記錄下最長路徑。由於要計算每個根節點延伸出的最長路徑,可以先計算該根節點的左、右節點爲起點的最長路徑,然後取最長的組合。遞歸就可以寫成計算根節點爲起點最長

原创 leetcode--ConvertSortedArraytoBinarySearchTree

思路:取中位數作爲當前的根節點,中位數左邊的數組遞歸的計算左子節點,中位數右邊的數組遞歸計算右子節點。 /** * Created by marsares on 15/6/15. */ public class ConvertSort

原创 leetcode--FlattenBinaryTreetoLinkedList

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">思路:順序爲前序遍歷的順序</span> 需要注

原创 leetcode--CourseScheduleII

思路: 先判斷有沒有環,再進行拓撲排序。 import java.util.ArrayList; import java.util.List; import java.util.Stack; /** * Created by mars

原创 leetcode--ConstructBinaryTreefromInorderandPostorderTraversal

思路:後序遍歷子節點一定在根節點的左邊,通過從右往左的遍歷可以從根節點到子節點生成二叉樹。中序遍歷左子節點在根節點的左邊,右子節點在根節點的右邊。在生成二叉樹的時候可以通過中序遍歷判斷當前節點在二叉樹中的位置。 import java.u

原创 leetcode--UniqueBinarySearchTreesII

思路:利用遞歸的思想,要返回(1,n)之間的所有BST可以遍歷1->n,root作爲根節點,然後將(1->root-1)返回的所有節點作爲左子節點以及(root+1,n)返回的所有節點作爲右子節點拼接在root下,所有這些root放入數組

原创 leetcode--ConstructBinaryTreefromInorderandPostorderTraversal

思路:後序遍歷前面的節點一定是後面的節點的子節點,因此從後往前遍歷可以從根節點向下構造出二叉樹。中序遍歷左子節點一定在根節點的左邊,而右子節點一定在根節點的右邊。因此可以通過中序遍歷來判斷當前節點在樹中的位置。 import java.u

原创 leetcode--BalancedBinaryTree

平衡二叉樹: 左右子樹深度差的絕對值不大於一,且左右子樹爲平衡二叉樹。 /** * Created by marsares on 15/6/12. */ public class BalancedBinaryTree { bo