劍指offer(62)二叉搜索樹的第K個節點
阿新 • • 發佈:2018-08-30
它的 spa cti pan class 們的 得到 style 例如
題目描述
給定一棵二叉搜索樹,請找出其中的第k小的結點。例如, (5,3,7,2,4,6,8) 中,按結點數值大小順序第三小結點的值為4。
題目分析
首先,我們可以先畫圖。畫完圖後我們要想辦法從中找出第K小的節點。
因為這是二叉搜索樹,我們可以輕易發現它的中序遍歷序列就是從小到大排列,也就是我們可以直接中序遍歷,同時計數,就可以得到我們想要的節點了。
不過需要註意的是我們的計數變量k應該在函數外面,不然遞歸進去後回來時是無法獲得已經改變了的k值的。
代碼
function KthNode(pRoot, k) { if(pRoot == null || k == 0){return null; } //為了能追蹤k,應該把KthNodeCore函數定義在這裏面,k應該在KthNodeCore函數外面 function KthNodeCore(pRoot){ let target = null; if(pRoot.left != null){ target = KthNodeCore(pRoot.left, k) } if(target == null){ if(k == 1){ target = pRoot; } k--; } if(target == null && pRoot.right != null){ target = KthNodeCore(pRoot.right, k); } return target; } return KthNodeCore(pRoot); }
劍指offer(62)二叉搜索樹的第K個節點