二叉树反转说的就是将二叉树的左子树右子树互换,
如果他们都有孩子的话,那么也递归的左右互换。
所以,二叉树反转的步骤简述为:
1.反转根节点的左子树(递归调用反转函数)
2.反转根节点的右子树(递归调用反转函数)
3.交换根节点的左节点和右节点。
二叉树反转的实例如图所示:初始:反转之后:
代码如下:
public TreeNode invertTree(TreeNode root) {
if(root==null){
return null;
}
invertTree(root.left);
invertTree(root.right);
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
return root;
}
//树的静态写法
struct node{
int lchild,rchild;
}Node[110];
void postOrder(int root){
if(root==-1)return;//如果某节点为-1,则代表它没有左右孩子
postOrder(Node[root].lchild);
postOrder(Node[root].rchild);
swap(Node[root].lchild,Node[root].rchild);//交换左右节点
}
int strToNum(char c){
if(c=='-')return -1;
else{
isRoot[c-'0']=false;//标记c不是根节点
return c-'0';//返回节点编号
}
}
for(int i=0,i<n;i++){
getchar();//吸收换行符
scanf("%c %c",&lchild,&rchild);//左右孩子节点//1 -
Node[i].lchild = strToNum(lchild);//char->int,顺便判断一下是不是根节点,就是它不是任何节点的孩子
Node[i].rchild = strToNum(rchild);
}