1.题目描述
2.思路
递归调用左右子树,就是调换左右子树的值。每个节点调换左右子树。
从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。如果当前遍历到的节点 root 的左右两棵子树都已经翻转,那么我们只需要交换两棵子树的位置,即可完成以 root 为根节点的整棵子树的翻转。
3.代码实现
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;
}
}
public class H226 {
public TreeNode invertTree(TreeNode root) {
if(root==null)
{
return null;
}
else
{
TreeNode left=invertTree(root.left);
TreeNode right=invertTree(root.right);
root.left=right;
root.right=left;
return root;
}
}
// 前序遍历输出翻转后的树结构(根 -> 左 -> 右)
public static void qianxu(TreeNode root)
{
if(root==null)
{
return ;
}
System.out.print(root.val+" ");
qianxu(root.left);
qianxu(root.right);
}
public static void main(String[] args)
{
TreeNode node3=new TreeNode(3,null,null);
TreeNode node2=new TreeNode(2);
TreeNode root=new TreeNode(1,node2,node3);
H226 test12=new H226();
TreeNode tree=test12.invertTree(root);
System.out.print("输出前序遍历的结果:");
qianxu(tree);
}
}