1. 程式人生 > >二叉搜尋樹與雙向連結串列的優化,設定全域性變數指向最後一次遍歷的從而連線,省略了迴圈找到最後的節點進行連線

二叉搜尋樹與雙向連結串列的優化,設定全域性變數指向最後一次遍歷的從而連線,省略了迴圈找到最後的節點進行連線

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; //最後返回雙向連結串列的頭結點
         
         }
}