输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
public class T_26_Convert_ {
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
;
while (p
!= null
&& p
.right
!= null
) {
p
= p
.right
;
}
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
;
}
}
public class T_06_Convert {
TreeNode first
= null
;
TreeNode tail
= null
;
public TreeNode
Convert(TreeNode pRootOfTree
) {
convertSub(pRootOfTree
);
return first
;
}
private void convertSub(TreeNode pRootOfTree
) {
if (pRootOfTree
== null
) {
return;
}
convertSub(pRootOfTree
.left
);
if (tail
== null
) {
first
= pRootOfTree
;
tail
= pRootOfTree
;
} else {
tail
.right
= pRootOfTree
;
pRootOfTree
.left
= tail
;
tail
= pRootOfTree
;
}
convertSub(pRootOfTree
.right
);
}
}
转载请注明原文地址: https://yun.8miu.com/read-111175.html