Binary tree judgment
判断完全二叉树
思路
使用层序遍历的思想
-
遇到节点左为空且右不为空,则不是
-
遇到一个叶子节点,其后必全是叶子节点,否则不是
实现
bool isCBT(Node* root) {if(root != null){queue<Node*> Nodeque;Nodeque.push(root);bool leaf = false;while(!Nodeque.empty()){Node* Front = Nodeque.front();Nodeque.pop();/******遇到子节点后,后续必全是子节点******/if(leaf && (Front->left != null || Front->right != null)){return false;}/******左为空,又不为空,不是完全二叉树******/if(Front->left == null&&Front->right != null){return false;}if(Front->left) Nodeque.push(Front->left);if(Front->right) Nodeque.push(Front->right);/******遇到第一个子节点******/if(!Front->left && !Front->right) leaf = true;}}return true; }
判断搜索二叉树
数据
使用preValue
表示左子树最后处理的数
思路
-
使用中序遍历的思想
-
比较
preValue
和root->value
实现
static int preValue = -1; bool isSBT(Node* root) {if(root == null) return true;bool isSBTleft = isSBT(root->left);if(!isSBTleft) return false;if(root->value <= preValue) return false;preValue = root->value;return isSBT(root->right); }
总结
需要结合这两种二叉树的特性进行判断,考验对其结构的理解