【LeetCode】114. Flatten Binary Tree to Linked List
阿新 • • 發佈:2018-12-20
Given a binary tree, flatten it to a linked list in-place.
For example, given the following tree:
1
/ \
2 5
/ \ \
3 4 6
The flattened tree should look like:
1
\
2
\
3
\
4
\
5
\
6
給一個二叉樹,要求按前序遍歷的順序把二叉樹變成一個連結串列。
step1:指標指向根節點,首先將根節點的左子樹掛在根節點的右子樹上,左子樹前序遍歷最後一個元素(即4)指向原右子樹的根節點5,根節點左子樹指向空。
1
\
2
/ \
3 4
\
5
\
6
step2:此時指標指向根節點的右子樹根節點2,重複step1,也就是將2的左子樹掛在2的右子樹上,左子樹最後一個元素連線2的原右子樹根節點5,2的左指標指向空。
1 \ 2 \ 3 \ 4 \ 5 \ 6
程式碼如下:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: void flatten(TreeNode* root) { while(root!=NULL){ if(root->left!=NULL){ TreeNode* curr=root->left; while(curr->right!=NULL) curr=curr->right; curr->right=root->right; root->right=root->left; root->left=NULL; } root=root->right; } } };
耐心些,按照例子仔細劃分一遍。