没想出来,郁闷。看了大佬的题解才解出来的。
相对来说第一个是比较简单的搜索二叉树。一个dfs无脑搞定。
第二个完全二叉树判断难点在于层次遍历这个知识点。之前搞过,但是忘了。多总结,回顾。谨记。
vector<bool> judgeIt(TreeNode* root) { bool isSearch = judgeTreeSearch(root,INT32_MIN,INT32_MAX); bool isComplete = judgeTreeComplete(root); // write code here return {isSearch,isComplete}; } bool judgeTreeSearch(TreeNode* root,int left,int right) { if(root == NULL){ return true; } if(root->val <= left || root->val >= right)return false; return judgeTreeSearch(root->left,left,root->val) && judgeTreeSearch(root->right,root->val,right); } bool judgeTreeComplete(TreeNode* root) { if(root == NULL) return true; queue<TreeNode *> queue; queue.push(root); bool flag = false; //标记之前是否出现过空节点 while(!queue.empty()){ root = queue.front(); queue.pop(); if(root == NULL){ flag = true; continue; } //层次顺序遍历,之前就存在空节点,因为左对齐,那么后面都不应该有非空节点存在。 if(flag){ return false; } queue.push(root->left); queue.push(root->right); } return true; }