二叉树展开为二叉树链表(右子节点)
原题在这里:
概述题意,给定一个二叉树,要求转换为右子节点连接起来的单链表。
analyse:
没啥好说的,很普通的转换,写了递归和迭代两个版本。
code:
class Solution { TreeNode *dfs(TreeNode *n) { if (!n) return nullptr; TreeNode *now = n; // now表示n所在树的先序遍历末节点 if (n->left && n->right) { now = dfs(n->left); //左子节点末端 now->right = n->right; //末端连接 now = dfs(n->right); //末端转移 } else if (n->left) now = dfs(n->left); else if (n->right) now = dfs(n->right); if (n->left) n->right = n->left; //当前节点构造 n->left = nullptr; return now; //返回末端节点 } public: void flatten(TreeNode *root) { //dfs(root); TreeNode *now = root; while (now) { if (now->left) { auto next = now->left; auto pre = next; while (pre->right) pre = pre->right; pre->right = now->right; now->left = nullptr; now->right = next; } now = now->right; } } };
【Over】
搜索
复制

浙公网安备 33010602011771号