• 《剑指offer》-判断对称二叉树


    题目描述
    请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

    思路上还是广度优先搜索(BFS)来做的。BFS是依托于STL的queue作为容器作为存储空间的,并且树的每一层节点的处理都放到一个内部的while循环中;
    使用一个vector存储层内节点元素值,然后判断这个vector是否为对称的。如果对称,还要考虑元素个数,除了第一层之外都应该是偶数个元素。这样的话没有考虑到null节点的处理。

    如果节点为null则存储一个0(假定样例节点值都是大于0的),这样就不用考虑vector元素个数的问题了。

    代码如下:

    class Solution {
    public:
    	bool isSymmetrical(TreeNode* pRoot)
    	{
    		if (pRoot == NULL){
    			return true;
    		}
    
    		queue<TreeNode*> Q;
    		Q.push(pRoot);
    
    		bool first_layer = true;
    
    		while (!Q.empty()){
    			int lo = 0, hi = Q.size();
    			vector<int> v;
    			while (lo++ < hi){
    				TreeNode* t = Q.front();
    				Q.pop();
    				if (t == NULL){
    					v.push_back(0);
    					continue;
    				}
    				else{
    					v.push_back(t->val);
    				}
    				if (t->left){
    					Q.push(t->left);
    				}
    				else{
    					Q.push(0);
    				}
    				if (t->right){
    					Q.push(t->right);
    				}
    				else{
    					Q.push(0);
    				}
    			}
    			for (int i = 0; i < v.size() / 2; i++){
    				if (v[i] != v[v.size() - 1 - i]){
    					return false;
    				}
    			}
    		}
    		return true;
    	}
    };
    
  • 相关阅读:
    1 TKinter小窗口及标题
    css之padding,marging
    css之opacity
    css之position
    Leetcode 1368 使网格图至少有一条有效路径的最小代价
    Leetcode 137 只出现一次的数字II
    Leetcode 135分发糖果
    Leetcode 134加油站
    Leetcode 124 二叉树的最大路径和
    Leetcode 5346 二叉树中的列表
  • 原文地址:https://www.cnblogs.com/zjutzz/p/6505616.html
Copyright © 2020-2023  润新知