C++程序检查给定的二叉树是否为满二叉树
给定一棵二叉树,任务是检查它是否为满二叉树。如果每个节点都有零个或两个子节点,则称二叉树为满二叉树。
例如
输入-1
输出
1
解释:除了叶子节点之外,每个节点都有两个子节点,因此它是一棵满二叉树。
输入-2:
输出
0
解释:节点 2 只有一个子节点,因此它不是一棵满二叉树。
解决此问题的方法
要检查给定的二叉树是否为满二叉树,我们可以递归地检查左子树和右子树。
- 输入具有节点及其子节点的给定二叉树。
- 布尔函数 isFullBinaryTree(Node*root) 以根节点作为输入,如果它是满二叉树则返回 True,否则返回 false。
- 在基本条件下,如果根节点为空或为空,则返回 True。
- 如果左子树和右子树为空或为空,则返回 True。
- 现在让我们递归地检查每个左子树和右子树并返回输出。
示例
#include<iostream> using namespace std; struct treenode { int data; treenode * left; treenode * right; }; struct treenode * createNode(int d) { struct treenode * root = new treenode; root -> data = d; root -> left = NULL; root -> right = NULL; return root; } bool isFullBinaryTree(struct treenode * root) { if (root == NULL) { return true; } if (root -> left == NULL and root -> right == NULL) { return true; } else if (root -> left and root -> right) { return (isFullBinaryTree(root -> left) and isFullBinaryTree(root -> right)); } return false; } int main() { struct treenode * root = NULL; root = createNode(1); root -> left = createNode(2); root -> right = createNode(3); root -> left -> right = createNode(4); root -> left -> left = createNode(5); root -> right -> left = createNode(6); if (isFullBinaryTree(root)) { cout << "1" << endl; } else { cout << "0" << endl; } return 0; }
运行以上代码将生成以下输出:
输出
0
解释:由于给定二叉树中的所有叶子节点都没有子节点,因此它不是满二叉树。所以,我们得到输出为 0。
广告