@LeetCode二叉树展开为链表--Flatten Binary Tree to Linked List[C++]

    xiaoxiao2023-12-06  160

    @LeetCode二叉树展开为链表--Flatten Binary Tree to Linked List[C++]

    问题描述解题思路程序实现

    问题描述

    给定一个二叉树,原地将它展开为链表。 例如: 将其展开为:

    解题思路

    观察链表,可以看出是先序遍历二叉树后依次放入链表中。因此,我们明确采用深度优先搜索。

    先将根结点放入 vector 中,再遍历左子树直到空结点为止,之后遍历右子树直到空结点为止。不断深搜下去可以将二叉树完全遍历。

    之后就是变成链表形式,可以看出链表还是基于二叉树形式形成的,只是将每个结点的左子结点为空,右子结点是先序遍历的结果。

    基于以上思路,代码就可以实现。

    程序实现

    /** * 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: vector<TreeNode*> res; public: void flatten(TreeNode* root) { if (!root) return; dfs(root); int len = res.size(); res[0]->left = NULL; for (int i = 0; i < len - 1; i++) { res[i]->right = res[i+1]; res[i+1]->left = NULL; } } void dfs(TreeNode* root) { if (!root) return; else { res.push_back(root); dfs(root->left); dfs(root->right); } return; } };

    @2019.05.26 北京·怀柔

    最新回复(0)