翻转一棵二叉树。
示例:
输入:
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;
}
}