代码随想录day14:二叉树part2

翻转二叉树

直接做指针交换即可,前序或后序都用递归的思路来解决,(即针对同一个问题使用同一套逻辑)因为中间结点都是独立于交换后的顺序而存在的。

注意,还是先进栈后处理,所以前序遍历中右结点先进栈

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;
    }
};

对称二叉树

对于二叉树是否对称,要比较的是根节点的左子树与右子树是不是相互翻转的,这便是与上题的逻辑共通之处

这里比较的不是同一个结点的左孩子和右孩子,而是传入比较的两个结点,比较二叉树外侧是否对称:传入的是左节点的左孩子,右节点的右孩子。比较内侧是否对称,传入左节点的右孩子,右节点的左孩子。如果左右都对称就返回true ,有一侧不对称就返回false 。

使用的遍历方式,左子树左右中,右子树右左中

求二叉树的最大深度和最小深度

这里注意,如果是queue的话,操作就如下:
在这里插入图片描述
而如果定义的是deque(双向队列)的话
在这里插入图片描述
!!!
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值