题目来源:https://leetcode.cn/problems/flatten-binary-tree-to-linked-list/
大致题意:
给一颗二叉树,将其按照前序遍历的顺序展开为链表。
要求在原树节点上做修改,使用原节点的右儿子指针指向下一个节点
思路
题目要求将二叉树将其按照前序遍历的顺序展开为链表,即为将前序遍历中前一个遍历到的节点的右指针指向当前节点,所以可以用一个标记存上一个遍历的节点,然后将修改上一个节点的左右指针即可
本质上还是二叉树的前序遍历,这里使用DFS递归实现
代码:
class Solution {
public void flatten(TreeNode root) {
dfs(root);
}
// 存上一个遍历的节点,初始为 null
TreeNode pre;
public void dfs(TreeNode node) {
if (node == null) {
return;
}
// 如果上一个节点不为空,则修改其左右指针
if (pre != null) {
pre.left = null;
pre.right = node;
}
pre = node;
// 这里提前存左右子节点,防止遍历过程中修改后进入错误的节点
TreeNode left = node.left;
TreeNode right = node.right;
dfs(left);
dfs(right);
}
}