题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
一、解题
二叉搜索树,顾名思义,就是根节点左子树都比根节点元素小,右子树的节点都比根节点大的树,搜索的速度取决于树的高度,如果树的构造接近完全二叉树,那么搜索效率为lgn,如果高度接近n,那么搜索效率就为n,n为节点数。
解题思路,二叉搜索树的中序遍历结果就是一个顺序数组,所以只有中序遍历就可以了。
#pragma once
#include <vector>
namespace search_tree
{
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(nullptr), right(nullptr) {
}
};
class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree)
{
if (pRootOfTree == nullptr)
{
return nullptr;
}
std::vector<TreeNode *> vec;
foreach(pRootOfTree, vec);
auto pNod