实现二叉树的反转
示例:
原二叉树:
4 / \ 2 7 / \ / \ 1 3 6 9
反转后的二叉树:
4 / \ 7 2 / \ / \ 9 6 3 1
代码实现:(递归)
思路:1.判断根是否为空,根为空直接返回根;否则继续;
2.递归反转根的左右子树
public TreeNode invertNode(TreeNode root) { if(root==null) return root; TreeNode temp=root.left; root.left=invertNode(root.right); root.right=invertNode(temp); return root; }
代码实现:(非递归)
思路:1.判断根是否为空,根为空直接返回根;否则继续;
2.交换根节点的左右子节点;
3. 交换第二层结点的左右子树;
4 重复下去,最后一个结点。
public TreeNode invertNode(TreeNode root) { if(root==null) return null; Queue<TreeNode> queue=new LinkedList<TreeNode>(); queue.add(root); while(queue!=null){ TreeNode current=queue.poll(); TreeNode temp=current.left; current.left=current.right; current.right=temp; if(current.left!=null) queue.add(current.left); if(current.right!=null) queue.add(current.right); } return root; }