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;
}