226.翻转二叉树

题目:[https://leetcode-cn.com/problems/invert-binary-tree/description/]
思路:题目要求交换二叉树的左右叶子,直接遍历全树,交换左右节点即可
代码

class Solution {
public:
    void invert(TreeNode* root) {
        TreeNode *temp=NULL;
        temp=root->right;//交换左右指针
        root->right=root->left;
        root->left=temp;
        if (root->left!=NULL) {//左
            invertTree(root->left);
        }
        if (root->right!=NULL) {//右
            invertTree(root->right);
        }
    }
    TreeNode* invertTree(TreeNode* root) {
        if (root!=NULL) {
            invert(root);
        }
        return root;
    }

讨论区[https://leetcode.com/problems/invert-binary-tree/discuss/62731/Recursive-and-non-recursive-C++-both-4ms]
优秀范例代码

Recursive//递归

TreeNode* invertTree(TreeNode* root) {
    if (root) {//后续遍历根节点,最后一个节点为根
        invertTree(root->left);
        invertTree(root->right);
        std::swap(root->left, root->right);
    }
    return root;
}
Non-Recursive

TreeNode* invertTree(TreeNode* root) {
    std::stack<TreeNode*> stk;//stl标准库stack适配器
    stk.push(root);//入栈
    
    while (!stk.empty()) {
        TreeNode* p = stk.top();//返回栈顶
        stk.pop();//出栈
        if (p) {
            stk.push(p->left);
            stk.push(p->right);
            std::swap(p->left, p->right);
        }
    }
    return root;
}

总结与反思:1、二叉树:前序:最先访问根节点;中序:居中访问根节点;后序:最后访问根节点
2、NULL为空,(什么都没有!)。与0区别

posted @ 2018-09-27 18:17  Kipper  阅读(225)  评论(0编辑  收藏  举报