1. 程式人生 > >劍指offer(62)二叉搜索樹的第K個節點

劍指offer(62)二叉搜索樹的第K個節點

它的 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個節點