描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
public class Jz26_Convert {
private TreeNode pre = null;
private TreeNode head = null;
@Test
public void test() {
TreeNode node1 = new TreeNode(5);
TreeNode node2 = new TreeNode(3);
TreeNode node3 = new TreeNode(8);
TreeNode node4 = new TreeNode(1);
TreeNode node5 = new TreeNode(4);
TreeNode node6 = new TreeNode(6);
TreeNode node7 = new TreeNode(9);
node1.left = node2;
node1.right = node3;
node2.left = node4;
node2.right = node5;
node3.left = node6;
node3.right = node7;
convertImpl(node1);
TreeNode p = node4;
while (p != null) {
System.out.println(p.val);
p = p.right;
}
}
public TreeNode Convert(TreeNode pRootOfTree) {
if(null == pRootOfTree){
return null;
}
convertImpl(pRootOfTree);
return head;
}
public void convertImpl(TreeNode cur) {
if (null != cur.left) {
convertImpl(cur.left);
}
cur.left = pre;
if (null != pre) {
pre.right = cur;
}else{
head = cur;
}
pre = cur;
if (null != cur.right) {
convertImpl(cur.right);
}
}
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
}