Flatten Binary Tree to Linked List

来源:互联网 发布:php 品质管理系统 编辑:程序博客网 时间:2024/05/02 02:11

Flatten Binary Tree to Linked List

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

Hints:
If you notice carefully in the flattened tree, each node’s right child points to the next node of a pre-order traversal.

如果没有特殊要求,一般二叉树的相关算法都可以递归实现,此题也不例外。
实现函数,扁平化二叉树,并返回叶子结点。代码如下:

void flatten(TreeNode* root) {    if (root == nullptr) {        return;    }    flattenTree(root);}TreeNode* flattenTree(TreeNode* root) {    if (root->left == nullptr && root->right == nullptr) {        return root;    }    TreeNode *rightEnd;    if (root->left) {        auto right = root->right;        root->right = root->left;        rightEnd = flattenTree(root->left);        if (right) {            rightEnd->right = right;            rightEnd = flattenTree(right);        }        root->left = nullptr;    } else if (root->right) {        rightEnd = flattenTree(root->right);    }    return rightEnd;}
0 0