TreeNode* newleft = invertTree(root->right);//先获取翻转后的左右子树的根节点
TreeNode* newright = invertTree(root->left);
root->left = newleft;//实现翻转
root->right = newright;
return root;//返回结果
4)控制重复的逻辑
以上已完成
最终代码:
class Solution {public://将根节点反转,并获取翻转后该根节点的指针TreeNode* invertTree(TreeNode* root) {if(root == NULL){return NULL;}else{//这样做将:树的底层先被真正交换,然后其上一层才做反转TreeNode*newleft =invertTree(root->right);TreeNode*newright =invertTree(root->left);root->left =newleft;root->right =newright;return root;}}};
例子3
获取前序遍历结果
原文地址,144/145/94 Binary Tree (Pre & In & Post) order Traversal
1),函数返回值如何构成原问题的解
明确函数意义,
获取以当前节点root为根的前序遍历结果
vectorpreorderTraversal(TreeNode* root) {
函数体....
}
解的构成,
在这里递归子程序的返回值并不是函数的解,我们只关心遍历顺序即可,而递归子程序的解并不关心,所以递归子程序的返回值我们并不需要(递归子函数不接受即可,但是还是要返回结果哈)。
2),递归的截止条件
截止条件就是可以得出结论的条件。
如果root为NULL,说明已经没有子树了,显然就截止了
立刻返回结果(这个结果返回给递归进来的上一层函数,上一层函数并不接受即可)
3)总是重复的递归过程
当2)中的条件都“躲过了”,
则即刻获取当前根节点的元素值,接着先访问以左子为根的子树,接着右....
4)控制