题目:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。比如输入图4.12中左边的二叉搜索树,则输出转换之后的排序双向链表。
代码:
BinaryTree* change(BinaryTree* root){
if(!root)return nullptr;
BinaryTree *r=change(root->m_right);
if(r) {
root->m_right = r;
r->m_left = root;
}
BinaryTree *l=change(root->m_left);
if(l){
BinaryTree *p=l;
while(p&&(p)->m_right){
p=(p)->m_right;
}
root->m_left=p;
(p)->m_right=root;
return l;
}
return root;
}
思路:
分解成子结构,递归调用