题目链接:Invert Binary Tree
题目描述:
Invert a binary tree
4
/ \
2 7
/ \ / \
1 3 6 9
to
4
/ \
7 2
/ \ / \
9 6 3 1
题目解释:
有上面的题目内容我们已经知道了题目的要求:
给定一棵二叉树,交换去左子树和右子树,再交换其子节点的左子树和右子树,直到所有子树都交换完毕。
解题方案:
这个题目是个很初级的基于树的结构的题目,我们可以使用递归的思路,就跟题目解释中说到的那样:递归的交换根结点的左子树和右子树,直到走到了叶节点。
直接上代码吧:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* invertTree(struct TreeNode* root)
{
if(root == NULL)
{
return root; //到叶节点就结束递归
}
else //交换 左子树和右子树
{
struct TreeNode* tmp;
tmp = root->left;
root->left = root->right;
root->right = tmp;
}
//递归的交换子节点的左子树和右子树
root->left = invertTree(root->left);
root->right = invertTree(root->right);
}
这个题目还是考查一个递归的思想,我们要在潜意识里加强 递归 的 重视,很多情况采用递归方式可以得到很好的解决方案。