题目:
Given a binary tree, flatten it to a linked list in-place.
For example,
Given
1 / \ 2 5 / \ \ 3 4 6
The flattened tree should look like:
1 \ 2 \ 3 \ 4 \ 5 \ 6
题目来源:https://oj.leetcode.com/problems/flatten-binary-tree-to-linked-list/
解题思路:对二叉树进行先序遍历,先保存其右孩子,等到左孩子都遍历完以后,保存其最后一个访问的孩子,然后把先前节点的右孩子接入到最后访问的左孩子的后面,即可构成一个单链。#include<iostream>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode *preorderTraverse(TreeNode *root)
{
TreeNode *rightChild=root->right,*last=NULL;
root->right=root->left;
root->left=NULL;
if(root->right!=NULL)
last=preorderTraverse(root->right);
else
last=root;
if(rightChild!=NULL)
{
last->right=rightChild;
last=preorderTraverse(last->right);
}
return last;
}
void flatten(TreeNode *root)
{
if(root==NULL)
return ;
preorderTraverse(root);
}
int main()
{
TreeNode *root=new TreeNode(1);
root->left=new TreeNode(2);
root->left->left=new TreeNode(3);
root->left->right=new TreeNode(4);
root->right=new TreeNode(5);
root->right->right=new TreeNode(6);
flatten(root);
system("pause");
return 0;
}