二叉搜尋樹與雙向連結串列的優化,設定全域性變數指向最後一次遍歷的從而連線,省略了迴圈找到最後的節點進行連線
package niuke;
public class SearchTreenode3 {
TreeNode lastNode = null;
public static void main(String[] args) {
}
public TreeNode Convert(TreeNode pRootOfTree) {
/*輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。*/
TreeNode left = null;
TreeNode right = null;
if(pRootOfTree == null) { //如果是空節點則返回為空
return null;
}
if(pRootOfTree.left == null && pRootOfTree.right == null) {
lastNode = pRootOfTree;
return lastNode; //無論是左節點還是右節點,當其為葉子節點時返回
}
left = Convert(pRootOfTree.left); //轉換左子樹
if(left != null) {
lastNode.right = pRootOfTree; //左子樹與中間節點建立連線
pRootOfTree.left = lastNode;
}
lastNode = pRootOfTree;
right = Convert(pRootOfTree.right);
if(right != null) {
pRootOfTree.right = right; //中間節點與右節點建立連線
right.left = pRootOfTree;
}
return left != null ? left:pRootOfTree; //最後返回雙向連結串列的頭結點
}
}