力扣HOT100之二叉树:226. 翻转二叉树
这道题很简单,用递归来做,对于一个根节点来说,有两种情况我们不需要翻转:一是根节点为空,二是根节点为叶子节点。这很容易理解,当传入的节点不满足上面的两种情况时,我们就需要做一个翻转,这里我们需要额外定义一个变量来保存当前节点的左孩子(或右孩子)节点,然后我们将其左右孩子再调用invertTree()
函数,再进行互换,然后返回根节点即可。
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:TreeNode* invertTree(TreeNode* root) {//用递归来做//终止条件,当根节点为空节点或叶子节点时则无需翻转,直接返回nullptrif(!root || (!root -> left && !root -> right)) return root; //单层递归逻辑主体TreeNode* temp = root -> left; //提前保存,避免被覆盖root -> left = invertTree(root -> right);root -> right = invertTree(temp);return root;}
};