114二叉树展开为链表
程序员文章站
2022-05-20 19:09:51
...
题目描述
给定一个二叉树,原地将它展开为链表。
思路分析
- 思路一:每次都将root的右子树转移到左子树的最右结点。
- 思路二:如果用前序递归解,将root的右子树存储,再递归转移,会超时。所以可以使用后序遍历解,这样就不会有子树结点问题。
代码实现
/**
* 非递归解法
*
* @param root
*/
public void flatten(TreeNode root) {
if (root == null) {
return;
}
while (root != null) {
if (root.left == null) {
root = root.right;
} else {
TreeNode pre = root.left;
while (pre.right != null) {
pre = pre.right;
}
pre.right = root.right;
root.right = root.left;
root.left = null;
root = root.right;
}
}
}
/**
* 递归解法,后序遍历
*/
private TreeNode pre = null;
public void flatten1(TreeNode root) {
if (root == null) {
return;
}
flatten1(root.right);
flatten1(root.left);
root.right = pre;
root.left = null;
pre = root;
}
上一篇: 笑话集原创笑话精品展第八十三期
下一篇: 力扣206. 反转链表