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
也就是说用先序遍历的方式将所有的节点都放到右侧来,我这里的方法的主要思想就是每次左侧存在节点的时候就将其原封不动的搬移到右侧来,代码如下:
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 void flatten(TreeNode* root) { 13 while(root){ 14 if(root->left){ 15 TreeNode * leftBegin = root->left; 16 root->left = NULL; 17 TreeNode * leftEnd = leftBegin; 18 while(leftEnd->right) 19 leftEnd = leftEnd->right; 20 TreeNode * tmpRight = root->right; 21 root->right = leftBegin; 22 leftEnd->right = tmpRight; 23 } 24 root = root->right; 25 } 26 } 27 };
时间: 2025-01-31 07:37:19