记录小白的做题历程:
题目:给你一棵二叉树的根节点
root,翻转这棵二叉树,并返回其根节点。输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]
思路:一看到这个题觉得好难啊,才刚刚学习树,脑子里完全没有东西,一闪而过的居然是反转链表。不过这当然是错的。
官方代码:
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if (root == nullptr) {
return nullptr;
}
TreeNode* left = invertTree(root->left);//递
TreeNode* right = invertTree(root->right);//递
root->left = right;//反转
root->right = left;
return root;
}
};
代码真的妙啊,先传递下去,此时left还是left结点,right还是right结点,但是因为递归下去了,其实子结点下面的左右已经进行了反转。然后再将左右孩子进行反转。
不要忘记递归结束条件,判断结点是否为空。
其它大佬的迭代写法:
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if (root == NULL) return root;
stack<TreeNode*> st;
st.push(root);
while(!st.empty()) {
TreeNode* node = st.top(); // 中
st.pop();
swap(node->left, node->right);
if(node->right) st.push(node->right); // 右
if(node->left) st.push(node->left); // 左
}
return root;
}
};
迭代是从头开始反转,比起遍历多了一个反转的过程。
2525

被折叠的 条评论
为什么被折叠?



