劍指Offer - 二叉搜尋樹與雙向連結串列(Java實現)
阿新 • • 發佈:2018-12-06
題目描述:
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
思路分析:
二叉搜尋樹(BST)有一個很關鍵的結論就是:中序遍歷的結果是非遞減(遞增)序列。而本題要求將BST轉換成排序的雙向連結串列,核心就是考察二叉樹的非遞迴中序遍歷方法。需要借用棧空間,並且需要一個變數記錄上一個出棧的元素。
程式碼實現如下:
public class Solution { public TreeNode Convert(TreeNode root) { if(root == null){ return null; } Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode cur = root;//記錄當前出棧節點。 TreeNode pre = null;//記錄上一個出棧節點。 boolean start = true;//判別第一個出棧節點。 while( !stack.isEmpty() || cur != null){ if(cur != null){ stack.push(cur); cur = cur.left; }else{ cur = stack.pop(); if(start){//記錄第一個出棧的節點。 root = cur; pre = cur; start = false; }else{ cur.left = pre; pre.right = cur; pre = cur; } cur = cur.right; } } return root; } }