/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
/*
*
* 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。
*
* 思路一:Hash表,新建节点一一对应
* 思路二:破坏原结构的话,使用递归
*
* */
public TreeNode mirrorTree1(TreeNode root) {
if (root == null) {
return null;
}
Map<TreeNode, TreeNode> map = new HashMap<>();
map.put(root, new TreeNode(root.val));
map.put(null, null);
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
if (node.left != null) {
queue.add(node.left);
if (!map.containsKey(node.left)) {
map.put(node.left, new TreeNode(node.left.val));
}
}
if (node.right != null) {
queue.add(node.right);
if (!map.containsKey(node.right)) {
map.put(node.right, new TreeNode(node.right.val));
}
}
map.get(node).left = map.get(node.right);
map.get(node).right = map.get(node.left);
}
return map.get(root);
}
public TreeNode mirrorTree2(TreeNode root) {
if (root == null) {
return null;
}
// 这个地方不能直接赋值 root.left = mirrorTree2(root.right) ,会破坏当前结构,影响第二步
TreeNode leftNode = mirrorTree2(root.left);
TreeNode rightNode = mirrorTree2(root.right);
root.left = rightNode;
root.right = leftNode;
return root;
}
}
剑指Offer学习 —— 树结构变换
最新推荐文章于 2024-08-06 10:22:43 发布