26、二叉搜索樹與雙向鏈表
阿新 • • 發佈:2017-08-30
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 { 15public 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、二叉搜索樹與雙向鏈表