实现二叉树的反转
示例:
原二叉树:
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;
- }