翻转一棵二叉树。
示例:
输入:
4<br /> / \<br /> 2 7<br /> / \ / \<br />1 3 6 9<br />输出:4<br /> / \<br /> 7 2<br /> / \ / \<br />9 6 3 1
思路:把树和子树辨别出来,只要拥有叶,就可以当作一个子树,使用递归实现,将所有树的左叶和右叶取出互换引用地址,一直递归
public TreeNode invertTree(TreeNode root) {if (root == null) {return null;}TreeNode left = invertTree(root.left);TreeNode right = invertTree(root.right);root.left=right;root.right=left;return root;}
全代码:
class TreeNode {int val;TreeNode left;TreeNode right;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 static void main(String[] args) {//构建一个树TreeNode treeNode1 = new TreeNode(9);TreeNode treeNode2 = new TreeNode(6);TreeNode treeNode3 = new TreeNode(7,treeNode2,treeNode1);TreeNode treeNode4 = new TreeNode(1);TreeNode treeNode5 = new TreeNode(3);TreeNode treeNode6 = new TreeNode(2,treeNode4,treeNode5);TreeNode treeNode = new TreeNode(4,treeNode6,treeNode3);Solution solution = new Solution();solution.invertTree(treeNode);}public TreeNode invertTree(TreeNode root) {//树为空if (root == null) {return null;}//左叶递归TreeNode left = invertTree(root.left);//右叶递归TreeNode right = invertTree(root.right);//树左叶和右叶互换root.left=right;//树左叶和右叶互换root.right=left;//返回树return root;}}
