Flatten Binary Tree to Linked List

来源:互联网 发布:淘宝怎样寻找真实货源 编辑:程序博客网 时间:2024/04/29 07:04


问题明显递归操作比较简单,我们看下草图:


紫色矩形表示进行了相同处理后的结果,在链接root和左子树的时候是可以直接操作的,但是我们这么去链接左子树和右子树呢?应该是左子树中最后的那个结点跟右子树的root链接,所以我们需要去找到左子树的最后(最右)那个非空结点。

//code

class Solution {public:TreeNode *&link(TreeNode *&root){if(root == NULL || root->left == NULL && root->right == NULL) return root;TreeNode *root_left = NULL;TreeNode *root_right = NULL;root_left = link(root->left);root_right = link(root->right);if(root_left != NULL){TreeNode *tail = root_left;//find the last one of root->left.while(tail->right) tail = tail->right;tail->right = root_right;}elseroot_left = root_right;root->right = root_left;root->left = NULL;return root;}void flatten(TreeNode *root) {if(root == NULL) return;root = link(root);}};

这里我们借用了另一个函数,来形成递归。




0 0
原创粉丝点击