您的位置:首页 > 其它

【leetcode】Flatten Binary Tree to Linked List

2015-07-14 11:01 375 查看
前序遍历二叉树,并进行扁平化处理

#include<iostream>
#include<vector>
#include<deque>
#include<stack>
using namespace std;
struct TreeNode
{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int val):val(val),left(NULL),right(NULL){};
};

class Solution
{
public:
TreeNode* fun(TreeNode* root)
{
if(!root)
return NULL;
stack<TreeNode*>result;
result.push(root);
while(!result.empty())
{
TreeNode* node=result.top();
result.pop();
if(node->right)
result.push(node->right);
if(node->left)
result.push(node->left);
node->left=NULL;
if(!result.empty())
node->right=result.top();
}
return root;
}
};

class Solution3
{
public:
void fun(TreeNode* root)
{
if(!root)
return;
vector<TreeNode*>result;
result.push_back(root);
while(!result.empty())
{
TreeNode* node=result.back();
result.pop_back();
if(node->right)
{
result.push_back(node->right);
node->right=NULL;
}
if(node->left)
{
result.push_back(node->left);
node->left=NULL;
}
if(!result.empty())
node->right=result.back();
else
node->right=NULL;

}
while(root)
{
cout<<root->val<<' ';
root=root->right;
}
}
};
void main()
{
TreeNode* node1=new TreeNode(1);
TreeNode* node2=new TreeNode(2);
TreeNode* node3=new TreeNode(3);
TreeNode* node4=new TreeNode(4);
TreeNode* node5=new TreeNode(5);
TreeNode* node6=new TreeNode(6);
TreeNode* node7=new TreeNode(7);
node1->left=node2;
node1->right=node3;
node2->left=node4;
node2->right=node5;
/*  node3->left=node6;
node3->right=node7;*/
// Solution solution;
//solution.recoverTree(node1);
//solution.recover(node1);
Solution solution;
TreeNode* head;
head=solution.fun(node1);
while(head)
{
cout<<head->val<<' ';
head=head->right;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: