如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :
二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。
思路:层次遍历
/** * 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 isEvenOddTree(TreeNode* root) { if(!root || root->val%2 == 0) return false; queue<TreeNode*>q; q.push(root); int level = 1; int cnt = 1; int levelNum = 0; int lastVal = 0; while(!q.empty()){ TreeNode* tmp = q.front(); if(tmp->val%2 != cnt%2) return false; q.pop(); level--; if(tmp->left){ q.push(tmp->left); levelNum++; } if(tmp->right){ q.push(tmp->right); levelNum++; } if(lastVal && cnt%2 && tmp->val <= lastVal) return false; if(lastVal && cnt%2 == 0 && tmp->val >= lastVal) return false; lastVal = tmp->val; if(!level){ level = levelNum; levelNum = 0; cnt++; lastVal = 0; } } return true; } };