性質:
1.對於BST的每個節點node,左子樹節點的值都比node的值要小,右子樹的值都比node的值大
2.對於BST的每個節點node,它的左側子樹和右側子樹都是BST。
從算法題的角度來看BST,除了它的定義,還有一個重要的性質:BST的中序遍歷結果是有序的node
void traverse(TreeNode root){ if(root==null){ return; } traverse(root.left); //中序遍歷代碼位置 print(root.val); traverse(root.right); }
考慮每一個根節點須要幹什麼,節點須要遍歷本身時就將rank值加1,表明遍歷到了第rank小的節點算法
int res=0; int rank=0; int kthSmallest(TreeNode root,int k){ traverse(root,k); return res; }
節點須要將本身的值更新爲res,res表明當前從大到小的節點值的和code
public void traverse(TreeNode root){ if(root==null){ return; } traverse(root.right); res+=root.val; root.val=res; traverse(root.left); }