题意:给出一棵二叉树,把它转换成一个链表,链表的顺序是二叉树先序遍历的结果。
思路:1、先序遍历二叉树,把结果插入一个vector。遍历vector,对所有结点,左指针为NULL,右指针指向下一个结点;
2、将左子树插入到根节点和右子树中,使用的是先根遍历。
代码:
void pre_order(TreeNode *root)
{
if(root == NULL)
return;
if(root->left != NULL)
{
pre_order(root->left);
TreeNode * cur = root->left;
while(cur->right != NULL)
cur = cur->right;//找到左子树的尾节点
//左子树的插入。
cur->right = root->right;
root->right = root->left;
root->left = NULL;
}
if(root->right != NULL)
pre_order(root->right);
}
void flatten(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
pre_order(root);
}