kiddy

把二元查找树转变成排序的双向链表

leave a comment »

把二元查找树转变成排序的双向链表
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何
新的结点,只调整指针的指向。
比如将二元查找树
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16

struct bsTreeNode{
	int val;
	bsTreeNode *left;
	bsTreeNode *right;
	bsTreeNode(int x): val(x), left(NULL), right(NULL){}
};

bsTreeNode *convert(bsTreeNode * root){
	if(root == NULL)	return NULL;
	bsTreeNode *leftHead = NULL;
	if(root->left != NULL){
		leftHead = convert(root->left);
		bsTreeNode *leftcpy = leftHead;
		while(leftcpy->right != NULL){
			leftcpy = leftcpy->right;
		}
		leftcpy->right = root;
		root->left = leftcpy;
	}
	if(root->right != NULL){
		bsTreeNode *rightHead = convert(root->right);
		rightHead->left = root;
		root->right = rightHead;
	}
	return (leftHead != NULL ? leftHead:root);
}

Written by linzhongzl

October 15, 2013 at 9:46 pm

Posted in Others

Leave a comment