leetcode 114. 二叉树展开为链表
思路
1、判断左子树是否为空,若为空则直接往右走,若不为空则2
2、将当前节点root的右子树接到当前root节点的左孩子节点的最右下边的孩子节点
3、将当前节点root的左子树接到右子树上,并将左节点置为NULL。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: void flatten(TreeNode* root) { if (!root) return; while(root!=NULL) { if(root->left!=NULL)//判断左子树是否为空 { TreeNode* p = root->left; // 得到当前根节点的左子树 while(p->right!=NULL)//得到当前左子树的最右下边的孩子节点 { p = p->right; } p->right = root->right;//将当前节点的右子树接到当前节点的左孩子节点最右下边的孩子节点上 root->right = root->left;//将当前接单的左子树接到右子树上 root->left=NULL; } root = root->right; } } };
以大多数人努力程度之低,根本轮不到去拼天赋~