1. 程式人生 > >26、二叉搜索樹與雙向鏈表

26、二叉搜索樹與雙向鏈表

public his 鏈表 return int 一個 != 樹遍歷 con

一、題目

輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。

二、解法

 1 /**
 2 public class TreeNode {
 3     int val = 0;
 4     TreeNode left = null;
 5     TreeNode right = null;
 6 
 7     public TreeNode(int val) {
 8         this.val = val;
 9 
10     }
11 
12 }
13 */
14 public class Solution {
15
public TreeNode Convert(TreeNode pRootOfTree) { 16 if(pRootOfTree == null) 17 return null; 18 //如果是葉子結點 19 if(pRootOfTree.left == null && pRootOfTree.right == null) 20 return pRootOfTree; 21 //1、先從左子樹遍歷 22 TreeNode left = Convert(pRootOfTree.left);
23 TreeNode p = left;//p指向當前鏈表的最後一個結點 24 while(p != null && p.right != null) 25 p = p.right; 26 //2、與當前的pRootOfTree進行連接 27 //p.right = pRootOfTree; pRootOfTree.left = p; 28 if(left != null){ 29 p.right = pRootOfTree; 30 pRootOfTree.left = p;
31 } 32 //3、右子樹轉換為雙向鏈表 33 TreeNode right = Convert(pRootOfTree.right); 34 if(right != null){ 35 pRootOfTree.right = right; 36 right.left = pRootOfTree; 37 } 38 return left != null ? left : pRootOfTree; 39 } 40 }

26、二叉搜索樹與雙向鏈表