题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
不知道为什么思路还是迷迷糊糊!!!
在线代码:
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
/*
分析二叉搜索树即就是排序树
举例为:
10
6 14
4 8 12 16
*/
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
//用于保存处理过程中双向链表的尾结点
TreeNode[] lastNode=new TreeNode[1];
converNode(pRootOfTree,lastNode);
TreeNode head=lastNode[0];
while(head!=null&&head.left!=null){
head=head.left;
}
return head;//
}
public void converNode(TreeNode node,TreeNode[] lastnode){
if(node!=null){
if(node.left!=null){
converNode(node.left,lastnode);//这个递归进去就是打印4
}
//将当前结点的最左边的结点交给链表的尾结点
node.left=lastnode[0];//将链表的尾端给了4
if(lastnode[0]!=null){
lastnode[0].right=node;
}
//记录当前结点为尾结点
lastnode[0]=node;
//处理右结点
if(node.right!=null){
converNode(node.right,lastnode);
}
}
}
}