剑指Offer30--面试题36. 二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
代码
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
// 双向链表的前驱节点,
TreeNode pre;
TreeNode head;
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree==null) return null;
//采用中序遍历
convertNode(pRootOfTree);
return head;
}
void convertNode(TreeNode node){
//递归的终止条件,当前节点为空,则返回
if(node==null)return;
// 左子树
convertNode(node.left);
//
if(pre != null) pre.right = node;
else head = node;
node.left = pre;
pre = node;
// 右子树
convertNode(node.right);
}
}