目录
一、题目
二、代码
三、完整测试代码
一、题目
1609. 奇偶树 - 力扣(LeetCode)

 
二、代码
/**
 * 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:
bool LevelOrder(TreeNode* root)//层序遍历
{
    deque<TreeNode*> q;
    if (root == nullptr)
    {
        return false;
    }
    q.push_back(root);
    int level = 0;//层次
    while (!q.empty())//循环进队
    {
        int n = q.size();
        int mark = level % 2 == 0 ? INT_MIN : INT_MAX;
        while (n--)
        {
            TreeNode* front = q.front();
            q.pop_front();
            if (front != nullptr)
            {
                if (level % 2 == 0)//偶数层
                {
                    if (front->val % 2 == 0)//节点的值不是奇数
                    {
                        return false;
                    }
                    else//节点的值是奇数
                    {
                        if (mark < front->val)
                        {
                            mark = front->val;
                        }
                        else
                        {
                            return false;
                        }
                    }
                }
                else//奇数层
                {
                    if (front->val % 2 != 0)//不是偶数
                    {
                        return false;
                    }
                    else
                    {
                        if (mark > front->val)
                        {
                            mark = front->val;
                        }
                        else {
                            return false;
                        }
                    }
                }
                q.push_back(front->left);
                q.push_back(front->right);
            }
        }
        level++;
    }
    return true;
}
    bool isEvenOddTree(TreeNode * root)
    {
        return LevelOrder(root);
    }
};
三、完整测试代码
#include<iostream>
#include<deque>
using namespace std;
struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
bool LevelOrder(TreeNode* root)//层序遍历
{
    deque<TreeNode*> q;
    if (root == nullptr)
    {
        return false;
    }
    q.push_back(root);
    int level = 0;//层次
    while (!q.empty())//循环进队
    {
        int n = q.size();
        int mark = level % 2 == 0 ? INT_MIN : INT_MAX;//标记
        while (n--)
        {
            TreeNode* front = q.front();
            q.pop_front();
            if (front != nullptr)
            {
                if (level % 2 == 0)//偶数层
                {
                    if (front->val % 2 == 0)//节点的值不是奇数
                    {
                        return false;
                    }
                    else//节点的值是奇数
                    {
                        if (mark < front->val)
                        {
                            mark = front->val;
                        }
                        else
                        {
                            return false;
                        }
                    }
                }
                else//奇数层
                {
                    if (front->val % 2 != 0)//不是偶数
                    {
                        return false;
                    }
                    else
                    {
                        if (mark > front->val)
                        {
                            mark = front->val;
                        }
                        else {
                            return false;
                        }
                    }
                }
                q.push_back(front->left);
                q.push_back(front->right);
            }
        }
        level++;
    }
    return true;
}
bool isEvenOddTree(TreeNode* root)
{
    return LevelOrder(root);
}
int main()
{
    TreeNode* root = new TreeNode(1);
    TreeNode* Node1 = new TreeNode(10);
    TreeNode* Node2 = new TreeNode(4);
    TreeNode* Node3 = new TreeNode(7);
    root->left = Node1;
    root->right = Node2;
    Node1->left = Node3;
    Node1->right = nullptr;
    Node2->left = nullptr;
    Node2->right = nullptr;
    Node3->left = nullptr;
    Node3->right = nullptr;
    
    int i = 0;
    cout << isEvenOddTree(root);
    return 0;
}

















