建网站需要什么步骤,网络推广的主要工作内容,淄博便宜网站设,怎么样免费建网站求二叉树的镜像 递归
破坏原来的树,把原来的树改为其镜像
如果二叉树为空,则返回空;如果不为空,则求左子树和右子树的镜像,然后交换左右子树。 /*** 求二叉树的镜像* param root* return*/public TreeNode mirror(Tr…
求二叉树的镜像
递归
破坏原来的树,把原来的树改为其镜像
- 如果二叉树为空,则返回空;
- 如果不为空,则求左子树和右子树的镜像,然后交换左右子树。
/*** 求二叉树的镜像* @param root* @return*/public TreeNode mirror(TreeNode root){if (root == null){return null;}TreeNode l = mirror(root.left);TreeNode r = mirror(root.right);root.left = r;root.right = l;return root;}
不能破坏原来的树,返回一个新的镜像
- 如果二叉树为空,则返回空;
- 如果不为空,则创建一个新的节点,新节点的左右孩子分别等于原右子树和左子树的镜像(这里相当于交换了左右子树)。
/*** 求二叉树的镜像,不破坏原树* @param root* @return*/public TreeNode mirrorCopy(TreeNode root){if (root == null){return null;}TreeNode newTree = new TreeNode(root.val);newTree.left = mirror(root.right);newTree.right = mirror(root.left);return newTree;}
非递归实现
非递归实现,其实就是遍历二叉树的所有节点,然后交换每个节点的左右子树即可。
这里我们用的是层序遍历的方式:
/*** 求二叉树的镜像,非递归* @param root*/public void mirror2(TreeNode root){if (root == null){return;}LinkedList<TreeNode> list = new LinkedList();list.add(root);while (!list.isEmpty()){TreeNode node = list.poll();TreeNode tmp = node.left;node.left = node.right;node.right = tmp;if (node.left != null){list.add(node.left);}if (node.right != null){list.add(node.right);}}}