题目描述:
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
参考代码1:递归
public void Mirror(TreeNode root) {
if(root == null || (root.left == null && root.right == null))return;
dfs(root);
}
public TreeNode dfs(TreeNode root){
if(root == null || (root.left == null && root.right == null))return root;
TreeNode leftChild = dfs(root.left);
TreeNode rightChild = dfs(root.right);
TreeNode temp = leftChild;
root.left = rightChild;
root.right = temp;
return root;
}
牛客网返回值为void,所以自己重新定义了一个函数,如果返回值为TreeNode,则不用这么麻烦(不用重新定义函数)。
参考代码2:队列
public void Mirror(TreeNode root) {
if(root == null || (root.left == null && root.right == null))return;
LinkedList<TreeNode> queue = new LinkedList<>();
queue.addLast(root);
while(!queue.isEmpty()){
TreeNode node = queue.removeFirst();
TreeNode temp = node.left;
node.left = node.right;
node.right = temp;
if(node.left!= null)queue.addLast(node.left);
if(node.right!= null)queue.addLast(node.right);
}
}
(完)