二叉搜索树与双向链表
题目描述:
输入一颗二叉搜索树,将该二叉树转换成一个排序的双向链表,要求不能创建任何一个新的节点,只能调整节点中的指针;
代码:
剑指offer上的方法:
static BinaryTreeNode node = null;
public static BinaryTreeNode Convert(BinaryTreeNode root) {
ConvertNode(root);
BinaryTreeNode head = node;
while(head != null && head.left != null) {
head = head.left;
}
return head;
}
private static void ConvertNode(BinaryTreeNode root) {
if(root == null) {
return;
}
BinaryTreeNode cur = root;
if(cur.left != null) {
ConvertNode(root.left);
}
cur.left = node;
if(node != null) {
node.right = cur;
}
node = cur;
if(cur.right != null) {
ConvertNode(root.right);
}
}
但我觉得还是用中序遍历的思想的这种方法简单:
BinaryTreeNode head = null;
BinaryTreeNode parent = null;
/**
* 用中序遍历的思想
* @param root
* @return
*/
private BinaryTreeNode Convert(BinaryTreeNode root) {
if(root == null) {
return null;
}
Convert(root.left);
if(head == null) {
head = root;
parent = root;
}else {
parent.right = root;
root.left = parent;
parent = root;
}
Convert(root.right);
return head;
}