結合**注釋的講解,來分析解決這個問題,或許是一種好辦法
題目描述:
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。題目**:二叉搜尋樹與雙向鍊錶–nowcoder
/*
struct treenode
};*/
class solution
std::vectorarray;
inorder(proot, array);
return assist(array);
}private:
void inorder(treenode* root, std::vector& array);
treenode* assist(std::vector& array);
};void solution::inorder(treenode* root, std::vector& array)
inorder(root->left, array);
array.push_back(root);
inorder(root->right, array);
}treenode* solution::assist(std::vector& array)
// 對第乙個節點,它的前驅(left)指向nullptr
treenode* ppre = nullptr;
treenode* pcur = array[0];
treenode* pnext = nullptr;
pcur->left = nullptr;
if (array.size() != 1)
else
int n = static_cast(array.size());
for (int i = 1; i < n; ++i)
else
pcur->left = ppre;
pcur->right = pnext;
}return array[0];
}
二叉搜尋樹與雙向鍊錶
1.問題描述 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。來自 劍指offer 2.分析 對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們...
二叉搜尋樹與雙向鍊錶
問題描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。演算法 struct binarytreenode binarytreenode convert binarytreenode prootoftree plastnodeinl...
二叉搜尋樹與雙向鍊錶
排序二叉樹與雙向鍊錶.cpp 定義控制台應用程式的入口點。題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 通過對一顆排序二叉樹的認識可知一顆排序二叉樹中序輸出就是有序的 通過後序遍歷讓子樹分別找到自己的left和rig...