原题链接 —— 二叉树展开为链表
问题描述
给定一个二叉树的根结点 root ,将它展开为一个单链表:
展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。
解题思路
代码如下
void flatten(TreeNode* root)
{
vector<TreeNode*> cur;
preOrderTraversal(root, cur);
int n = cur.size();
for(int i = 1; i < n; i++)//这个居然是1..0会报错
{
TreeNode* pre = cur.at(i - 1);
TreeNode* curr = cur.at(i);
pre->left = nullptr;
pre->right = curr;
}
}
void preOrderTraversal(TreeNode* root, vector<TreeNode*> &nums)
{
if(root != NULL){
nums.push_back(root);
preOrderTraversal(root->left, nums);
preOrderTraversal(root->right, nums);
}
}