劍指offer -- 二叉搜尋樹與雙向連結串列
阿新 • • 發佈:2018-11-05
題目
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
AC程式碼
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
TreeNode lastNode = null; //正在遍歷節點的前一個節點
public TreeNode Convert(TreeNode pRootOfTree) {
convertNode(pRootOfTree); //遍歷根節點的時候,lastNode 指向的是根節點左子數的最右邊節點
TreeNode headNode = lastNode;
while(headNode != null && headNode.left != null) headNode = headNode.left; //尋找真正的頭節點
return headNode;
}
private void convertNode(TreeNode root){
if(root == null) return;
TreeNode currNode = root;
if(currNode.left != null) convertNode(currNode.left);
currNode.left = lastNode;
if(lastNode != null) lastNode.right = currNode;
lastNode = currNode;
if(currNode. right != null) convertNode(currNode.right);
}
}