zoukankan      html  css  js  c++  java
  • 程序员面试题精选100题(60)判断二叉树是不是平衡的

     

    题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。例如下图中的二叉树就是一棵平衡二叉树:

    程序员面试题精选100题(60)-判断二叉树是不是平衡的 - 何海涛 - 微软、Google等面试题

    #include <iostream>
    using namespace std;

    struct BTNode{
    BTNode
    *Left;
    BTNode
    *Right;
    int value;
    BTNode(
    int val = 0)
    :value(val){}
    };

    BTNode
    * CreateTree(){
    int data;
    cin
    >> data;
    BTNode
    * root;

    if(-1 == data)
    return NULL;
    else{
    root
    = new BTNode(data);
    root
    ->Left = CreateTree();
    root
    ->Right = CreateTree();
    }
    return root;
    }

    bool IsBalancedBT(BTNode* pRoot,int *pDepth){
    if(!pRoot){
    *pDepth = 0;
    return true;
    }
    int left,right;
    if(IsBalancedBT(pRoot->Left,&left)
    &&IsBalancedBT(pRoot->Right,&right)){
    int diff = left - right;
    if(diff<=1 && diff>=-1){
    *pDepth = 1+(left>right?left:right);
    return true;
    }
    }
    return false;
    }

    bool IsBalanced(BTNode* root){
    int depth = 0;
    return IsBalancedBT(root,&depth);
    }

    void printTree(BTNode* root){
    if(!root) return;
    printTree(root
    ->Left);
    cout
    << root->value << " ";
    printTree(root
    ->Right);
    return;
    }

    int main(){
    BTNode
    * root = CreateTree();
    printTree(root);
    cout
    << endl;
    if(IsBalanced(root))
    cout
    << "The binary tree is balanced!" << endl;

    return 0;
    }
    参考文献:http://zhedahht.blog.163.com/blog/static/25411174201142733927831/
  • 相关阅读:
    CSS3---用户界面
    CSS3---媒体查询与响应式布局
    HDU 5285 wyh2000 and pupil
    POJ 2488 A Knight's Journey
    POJ 1067 取石子游戏
    POJ 2777 Count Color
    POJ 3259 Wormholes
    Project Euler 26 Reciprocal cycles
    POJ 2104 K-th Number
    POJ 1013 Counterfeit Dollar
  • 原文地址:https://www.cnblogs.com/phoenixzq/p/2122698.html
Copyright © 2011-2022 走看看