在处理二叉树的过程中,对于二叉树指向问题一直是比较棘手的问题,常见做法就是将二叉树用(前中后层序)遍历的形式进行转换,对于较为复杂的问题,如何去解决呢?
我们介绍到一种分治思想
问题:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
这个问题如果我们去研究更改指向的规律,很容易将我们自身绕进去。
我们给定一个这样的BST树,如果我们来研究如何将其更改指向到接下来这张图
我们是无法通过找规律旋转出来的。
但是我们会一种做法:
中序遍历
我们可以用一个容器,将遍历后的结果放到一个容器里面,然后对这个容器进行操作,就能得到一个想要的链表。来看代码:
void Inorder(TreeNode* root, vector<TreeNode*> & vec)
{
if(root == nullptr)
{
return;
}
else
{
Inorder(root-> left,vec);
vec.push_back(root);
Inorder(root->right,vec);
}
}