OJ:lintcode 平衡二叉树

作者: DayDayUpppppp | 来源:发表于2017-02-19 09:30 被阅读9次

给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。
您在真实的面试中是否遇到过这个题?

image.png
/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */
 /*
    这个思路是 写了一个getdeep的函数,函数的返回值是树的深度
    然后isbal函数 前序遍历每一个节点,然后调用getdeep的函数,判断自己左右子树的高度,判断这个节点是不是平衡的。

    这个isbal 函数的判断过程 使用一个 引用,即void isbal(TreeNode * root,int & flag);

    如果不平衡,就让它等于=1,而没有采取返回值的策略。因为实在想不到什么好的设计思路,可以很好的思路处理返回值。
    这里挖一个坑,以后有了好的想法,再来补。

*/
class Solution {
public:
    /**
     * @param root: The root of binary tree.
     * @return: True if this Binary tree is Balanced, or false.
     */
    int getdeep(TreeNode *p){
        if(p==NULL){
            return 0;
        }
        int deep_left=0;
        int deep_right=0;
        if(p->left!=NULL){
            deep_left=getdeep(p->left);
        }
        if(p->right!=NULL){
            deep_right=getdeep(p->right);
        }

        return deep_left>deep_right?deep_left+1:deep_right+1;
    }

    void isbal(TreeNode * root,int & flag){
        if(root!=NULL){
            isbal(root->left,flag);

            //判断当前节点
            int dl=getdeep(root->left);
            int dr=getdeep(root->right);
            if((dl-dr>1)||(dl-dr)<-1)
            {
                flag=0;
            }

            isbal(root->right,flag);
        }
    }

    bool isBalanced(TreeNode *root) {
        // write your code here
        int flag=1;
        isbal(root,flag);
        return flag;
        
    }
};

相关文章

  • OJ:lintcode 平衡二叉树

    给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深...

  • [每日一道算法题] 从上往下打印二叉树

    Algorithm OJ address OJ website : 从上往下打印二叉树 Description 从...

  • OJ lintcode 等价二叉树

    检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。

  • OJ lintcode 翻转二叉树

    翻转一棵二叉树

  • OJ lintcode 克隆二叉树

    深度复制一个二叉树。给定一个二叉树,返回一个他的 克隆品 。

  • OJ lintcode 左填充

    实现一个leftpad库,如果不知道什么是leftpad可以看样例您在真实的面试中是否遇到过这个题?Yes样例le...

  • OJ lintcode 移动零

    给一个数组 nums 写一个函数将 0 移动到数组的最后面,非零元素保持原数组的顺序注意事项1.必须在原数组上操作...

  • OJ lintcode 哈希函数

    在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数。一个好的哈希函数...

  • OJ lintcode 中位数

    给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N...

  • OJ lintcode 链表划分

    给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对...

网友评论

    本文标题:OJ:lintcode 平衡二叉树

    本文链接:https://www.haomeiwen.com/subject/dczdwttx.html