各种树的题目

来源:互联网 发布:大数据可视化展示系统 编辑:程序博客网 时间:2024/05/17 21:55

1.判断二叉树是否平衡

解法1:

int treeDepth(Node *root){if(root == NULL)return 0;int ld = treeDepth(root->left);int rd = treeDepth(root->right);return ld > rd ? ld + 1 : rd + 1;}bool isBalanced(Node *root){if(root == NULL)return true;int leftDepth = treeDepth(root->left);int rightDepth = treeDepth(root->right);if(abs(leftDepth - rightDepth) > 1)return false;else return isBalanced(root->left) && isBalanced(root->right);}

解法2:

bool isBalancedCore(Node *root, int *depth);bool isBalanced(Node *root){int depth = 0;return isBalancedCore(root, &depth);}bool isBalancedCore(Node *root, int *depth){if(root == NULL){*depth = 0;return true;}int left, right;if(isBalancedCore(root->left, &left) && isBalancedCore(root->right, &right)){int diff = left - right;if(diff <= 1 && diff >= -1){*depth = 1 + (left > right ? left : right);return true;}}return false;}


2.判断二叉树是否完全二叉树

采用层序遍历

bool isCompleteTree(Node *root){queue<Node*> q;q.push(root);while(q.front() != NULL){Node *ptr = q.front();q.pop();q.push(ptr->left);q.push(ptr->right);}while(!q.empty()){if(q.front() != NULL)return false;q.pop();}return true;}




3..判断二叉树是否二叉排序树

bool isBST(Node *root){if(root == NULL)return true;queue<Node*> q;q.push(root);while(!q.empty()){Node *ptr = q.front();q.pop();if(ptr->left){if(ptr->data < ptr->left->data)return false;else q.push(ptr->left);}if(p->right){if(p->data > p->right->data)return false;elseq.push(ptr->right);}}return true;}



0 0