本文为个人解题思路整理,水平有限,有问题欢迎交流
概览
一个简单的递归而已,入门级算法题,其实没啥记录的价值,写出来是因为看到个有趣的东西,莫名可爱
难度:入门
核心知识点:递归
题目来源
力扣:https://leetcode-cn.com/problems/invert-binary-tree/
题目内容
翻转一颗二叉树
样例
数据源
4
/ \
2 7
/ \ / \
1 3 6 9
输出
4
/ \
7 2
/ \ / \
9 6 3 1
解题思路
- 观察样例可以看出我们需要把所有节点的左右子节点互换位置,那么将所有节点的左右子节点互换即可
- 因为二叉树所有节点的结构一致,那么可以从根节点开始互换左右子节点,并将子节点作为父节点做同样的操作
解题方案
-
将根节点作为当前父节点
-
开始处理父节点
-
检查父节点是否为空,是的话那么没有子节点,结束
-
分别将子节点作为根节点
-
开始处理父节点
…
-
完整代码
public class InvertTree {
public static void main(String[] args) {
// write your code here
InvertTree invertTree = new InvertTree();
}
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public InvertTree() {
//模拟构建一棵树
TreeNode node1 = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node6 = new TreeNode(6);
TreeNode node7 = new TreeNode(7);
TreeNode node9 = new TreeNode(9);
node4.left = node2;
node4.right = node7;
node2.left = node1;
node2.right = node3;
node7.left = node6;
node7.right = node9;
//执行翻转
invertTree(node4);
// System.out.println(node4.toString());//打印无效,要自己重写toString方法,此处省略,仅用于断点
}
public TreeNode invertTree(TreeNode root) {
search(root);
return root;
}
public void search(TreeNode root) {
if (root == null) {
return;
}
TreeNode t = root.left;
root.left = root.right;
root.right = t;
search(root.left);
search(root.right);
}
}
执行结果
莫得,自己打个断点看node4的内容吧,树打印出来太麻烦了
性能
后记
我还特地去了解了一下Homebrew,觉得这样牛皮的一个人居然手写不出来这题,着实过于离谱
作者:Echo_Ye
WX:Echo_YeZ
Email :echo_yezi@qq.com
个人站点:在搭了在搭了。。。(右键 - 新建文件夹)