二叉树展开为链表

题目难度:Medium

Posted by 谢玄xx on April 7, 2022

原题链接 —— 二叉树展开为链表

问题描述

给定一个二叉树的根结点 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);
    }
}