156.上下翻转二叉树
方法:自底向上迭代
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public TreeNode upsideDownBinaryTree(TreeNode root) {if(root == null || root.left == null && root.right == null){return root;}Stack<TreeNode> stack = new Stack<>(); TreeNode tmp = root;while(tmp != null){stack.push(tmp);tmp = tmp.left; //一直找到最左的节点}TreeNode newRoot = stack.pop();while(!stack.isEmpty()){TreeNode node = stack.pop();TreeNode preLeft = node.left,preRight = node.right;preLeft.left = preRight;preLeft.right = node;node.left = null;node.right = null;}return newRoot;}
}
方法二:递归
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public TreeNode upsideDownBinaryTree(TreeNode root) {if(root == null || root.left == null && root.right == null){return root;}TreeNode left = root.left,right = root.right;TreeNode newRoot = upsideDownBinaryTree(left);left.left = right;left.right = root;root.left = null; //将root的左右节点都设为空,表示翻转之和root的左右节点不再是left和rightroot.right = null;return newRoot;}
}