劍指offer程式設計題(JAVA實現)——第26題:二叉搜尋樹與雙向連結串列
阿新 • • 發佈:2018-12-27
github | https://github.com/JasonZhangCauc/JZOffer |
---|
/**
*
* 劍指offer程式設計題(JAVA實現)——第26題:二叉搜尋樹與雙向連結串列
*
* 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。
* 要求不能建立任何新的結點,只能調整樹中結點指標的指向。
* (是指不能new新的結點)
*/
public class Test26 {
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree==null) {
return null;
}
if(pRootOfTree.left==null&&pRootOfTree.right==null) {
return pRootOfTree;
}
TreeNode left = Convert(pRootOfTree.left);
TreeNode p = left;
if(p!=null&&p.right!=null) {
while(p.right!=null) {
p = p.right;
}
}
//p為左子樹最右節點
if(left!=null) {
p.right=pRootOfTree;
pRootOfTree.left=p;
}
TreeNode right = Convert (pRootOfTree.right);
if(right!=null) {
right.left=pRootOfTree;
pRootOfTree.right=right;
}
return left != null ? left : pRootOfTree;
}
}
}