二叉搜索樹與雙向鏈表[待加深]

2018/11/4
??環(huán)境:牛客的編譯環(huán)境
??語言:JavaScript
??難點:

  • 二叉搜索樹的概念:二叉搜索樹也叫二叉排序樹,規(guī)則是所有比根節(jié)點小的數(shù)都是根節(jié)點的左子樹中,所有比根節(jié)點大的數(shù)都是根節(jié)點的右子樹。
  • 開始不太明白將二叉搜索樹變成雙向鏈表的意思,根據(jù)搜索樹的特點,比root節(jié)點小的樹都在左邊,比root節(jié)點大的數(shù)在右邊,轉換成雙向鏈表的話,實際上就是指一個數(shù)字從小到大排序的雙向鏈表。
    ??題目:輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創(chuàng)建任何新的結點,只能調(diào)整樹中結點指針的指向
    ??思路:
    先找到最左子樹,記錄該子樹,在程序的最后返回該節(jié)點。
    找到左子樹后,按照二叉搜索樹的特點,可以用pre節(jié)點去保存左邊的節(jié)點,之后設置先后即可。
    ??代碼:
/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */

function Convert(pRootOfTree)
{
    // write code here
    if(pRootOfTree == null)
        return null;
    var stack = [],
        p = pRootOfTree,
        isFirst = true;
    var pre;
    var root;
    while(p != null || stack.length > 0){
        while(p != null){
            stack.push(p);
            p = p.left;
        }
        p = stack.pop();
        if(isFirst){
            root = p;
            pre = root;
            isFirst = false;
        }else{
            pre.right = p;
            p.left = pre;
            pre = p;
        }
        p = p.right;
    }
    return root;
}
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容