# LintCode: Flatten Binary Tree to Linked List

C++

Traverse

 1 /**
2  * Definition of TreeNode:
3  * class TreeNode {
4  * public:
5  *     int val;
6  *     TreeNode *left, *right;
7  *     TreeNode(int val) {
8  *         this->val = val;
9  *         this->left = this->right = NULL;
10  *     }
11  * }
12  */
13 class Solution {
14 public:
15     /**
16      * @param root: a TreeNode, the root of the binary tree
17      * @return: nothing
18      */
19     void flatten(TreeNode *root) {
20         if(!root) return;
21         vector<TreeNode*> allNodes;
22         preorder(root, allNodes);
23         int n = allNodes.size();
24         for(int i=0; i<n-1; i++) {
25             allNodes[i]->left = NULL;
26             allNodes[i]->right = allNodes[i+1];
27         }
28         allNodes[n-1]->left = allNodes[n-1]->right = NULL;
29     }
30
31     void preorder(TreeNode *root, vector<TreeNode*> &allNodes) {
32         if(!root) return;
33         allNodes.push_back(root);
34         preorder(root->left, allNodes);
35         preorder(root->right, allNodes);
36     }
37 };

C++

Divide-Conquer

Recursive

 1 /**
2  * Definition of TreeNode:
3  * class TreeNode {
4  * public:
5  *     int val;
6  *     TreeNode *left, *right;
7  *     TreeNode(int val) {
8  *         this->val = val;
9  *         this->left = this->right = NULL;
10  *     }
11  * }
12  */
13 class Solution {
14 public:
15     /**
16      * @param root: a TreeNode, the root of the binary tree
17      * @return: nothing
18      */
19     void flatten(TreeNode *root) {
20         helper(root);
21     }
22
23     TreeNode* helper(TreeNode *root) {
24         if (root == NULL) {
25             return NULL;
26         }
27         if (root->left == NULL && root->right == NULL) {
28             return root;
29         }
30         if (root->left == NULL) {
31             return helper(root->right);
32         }
33         if (root->right == NULL) {
34             root->right = root->left;
35             root->left = NULL;//!important
36             return helper(root->right);
37         }
38         //Divide
39         TreeNode *leftLastNode = helper(root->left);
40         TreeNode *rightLastNode = helper(root->right);
41
42         //Conquer
43         leftLastNode->right = root->right;
44         root->right = root->left;
45         root->left = NULL;//!important
46         return rightLastNode;
47     }
48 };

|
10月前
|
Java
Leetcode 114. Flatten Binary Tree to Linked List

35 1
|
3月前
Qt控件（按钮、单选、复选、list、tree、table）
Qt控件（按钮、单选、复选、list、tree、table）
45 2
|
10月前
|
JSON JavaScript 数据格式
Elementui Tree 树形控件，将勾选选中的值放在list集合里面提交
Elementui Tree 树形控件，将勾选选中的值放在list集合里面提交
65 1
list转tree，并支持搜索
list转tree，并支持搜索
50 0
|

100 1
|
3月前
|

java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
352 1
|
2月前
|
Java API Apache

33 1
|
2月前
|

PolarDB产品使用问题之使用List或Range分区表时，Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务，旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境，满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能，实现数据库的高效运维与持续优化。
25 3
|
2月前
|

34 3
|
3月前
|
Java API

43 3

DDNS