链接
题目:
给你二叉树的根结点 root ,请你将它展开为一个单链表:
展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。
展开后的单链表应该与二叉树 先序遍历 顺序相同。

解题:
使用先序遍历,然后展开为单链表。注意先序遍历中的数组是存放的节点指针,不是值。
vector<TreeNode*> preOrder(TreeNode* root){
stack<TreeNode*> st;
st.push(root);
vector<TreeNode*> vec;
while(!st.empty()){
TreeNode* tmp=st.top();st.pop();
vec.push_back(tmp);
if(tmp->right)st.push(tmp->right);
if(tmp->left)st.push(tmp->left);
}
return vec;
}
void flatten(TreeNode* root) {
if(root==NULL)return;
vector<TreeNode*> vec=preOrder(root);
for(int i=1;i<vec.size();i++){
TreeNode* pre=vec[i-1];
TreeNode* cur=vec[i];
pre->left=nullptr;
pre->right=cur;
}
}
本文介绍了一种将二叉树结构展平为单链表的方法,通过先序遍历的方式,使得链表的顺序与二叉树的先序遍历顺序保持一致。该方法利用了栈来辅助完成遍历过程,并最终调整二叉树节点的指针指向以形成链表。
193

被折叠的 条评论
为什么被折叠?



