标签:leetcode
* | |
* For example, | |
* Given | |
* | |
* 1 | |
* / \ | |
* 2 5 | |
* / \ \ | |
* 3 4 6 | |
* | |
* The flattened tree should look like: | |
* | |
* 1 | |
* \ | |
* 2 | |
* \ | |
* 3 | |
* \ | |
* 4 | |
* \ | |
* 5 | |
* \ | |
* 6 | |
* | |
* | |
* Hints: | |
* If you notice carefully in the flattened tree, each node‘s right child points to | |
* the next node of a pre-order traversal. | |
* | |
**********************************************************************************/ | |
/** | |
* Definition for binary tree | |
* struct TreeNode { | |
* int val; | |
* TreeNode *left; | |
* TreeNode *right; | |
* TreeNode(int x) : val(x), left(NULL), right(NULL) {} | |
* }; | |
新生成的List的每个节点的右子树指向的是 先序遍历中该节点的下一个节点。那么本题其实就是考察先序遍历。
class Solution { public: void flatten(TreeNode *root) { vector<TreeNode*> v, stack; stack.push_back(root); while(stack.size()>0){ TreeNode* node = stack.back(); stack.pop_back(); v.push_back(node); if (node && node->right){ stack.push_back(node->right);//先入栈右子树,后出栈右子树 } if (node && node->left){ stack.push_back(node->left);//后入栈左子树,先出栈左子树 } } v.push_back(NULL); for(int i=0; i<v.size(); i++){//按照先序遍历的顺序将节点链接起来 if (v[i]){ v[i]->left = NULL; v[i]->right = v[i+1]; } } } };
版权声明:本文为博主原创文章,未经博主允许不得转载。
Flatten Binary Tree to Linked List
标签:leetcode
原文地址:http://blog.csdn.net/ruzhuxiaogu/article/details/47379635