小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
leetcode226-反转二叉树
前文
本文为菜鸟的刷题记录,仅用作笔记使用,并非最佳解决方案。
题目信息
翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
解题思路分析
解法1
本方案的主要思路,就是根据二叉树的性质进行处理。每个节点均有两个子节点,当想对二叉树进行翻转时,只需要对于所有节点的左右节点进行交换。当二叉树被翻转后,原本位于左节点的子节点将变为目标二叉树的右节点,原本位于右节点的子节点,将变为目标二叉树的左节点。也就是整个原始二叉树,将发生左右节点交换的行为。因此对于原始二叉树,从根节点开始,对于左右节点进行交换,需要利用到变量临时存储节点。同时采用递归的思想,每个节点处理过后,需要对该节点的左右节点分别进行同样的处理,将左右节点传入到递归函数中。当整个二叉树翻转结束,只需要返回原始二叉树的根节点,即得到了目标二叉树的根节点,也就是得到了目标二叉树。
public TreeNode invertTree(TreeNode root) {
if(root == null){
return root;
}
TreeNode temp = new TreeNode(0);
temp = root.left;
root.left = root.right;
root.right = temp;
// 左右节点交换
invertTree(root.left);
invertTree(root.right);
return root;
}
复杂度分析
- 时间复杂度 o(n)
- 空间复杂度 o(n)
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。