226. 翻转二叉树
翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
解法一:前序遍历递归
public TreeNode invertTree(TreeNode root) { invert(root); return root; } void invert(TreeNode root) { if(root == null) return ; TreeNode temp = root.left; root.left = root.right; root.right = temp; invert(root.left); invert(root.right); }
解法二:层次遍历迭代法 给我的启发就是我们 对于树的操作要实现是向下操作,其实每个节点有关的仅仅是向下的那两个节点
public TreeNode invertTree(TreeNode root) { if(root==null) return root; TreeNode newroot; newroot = root; LinkedListqueue = new LinkedList<>(); queue.add(root); while(!queue.isEmpty()) { TreeNode temp = queue.poll(); if(temp.right!=null) { queue.push(temp.right); } if(temp.left!=null) { queue.push(temp.left); } TreeNode te = temp.left; temp.left = temp.right; temp.right = te; } return root; }
解法三:前序遍历迭代法 因为本题像一个前序遍历 ,所以可以写成迭代版的前序遍历,通过递归向迭代的转变,可以用迭代来实现本题
*****************************************