zoukankan      html  css  js  c++  java
  • 推断二叉树是不是平衡二叉树

    题目:输入一棵二叉树的根结点,推断该树是不是平衡二叉树。

    某二叉树中随意结点的左右子树的深度相差不超过1。那么它就是一棵二叉树。
            我们非常easy就能想到一个代码简洁却性能不佳的思路:在遍历树的每一个结点的时候,调用函数TreeDpth得到它的左右子树的深度。

    假设每一个结点的左右子树的深度相差都不超过1。依照定义它就是一棵平衡的二又树。

            较好的思路是:用后序遍历的方式遍历整棵二叉树。

    在遍历某结点的左右子结点之后,我们能够依据它的左右子结点的深度推断它是不是平衡的,并得到当前结点的深度。

    当最后遍历到树的根结点的时候,也就推断了整棵一几叉树是不是平衡一叉树。这样的方案每一个结点仅仅需遍历一次。

    struct BinaryTreeNode{
    	int m_nValue;
    	BinaryTreeNode *m_pLeft;
    	BinaryTreeNode *m_pRight;
    };
    bool IsBalanced(BinaryTreeNode *pRoot, int *depth)
    {
    	if (pRoot==NULL)
    	{
    		*depth=0;
    		return true;
    	}
    	//中间变量,记录左右子树的深度
    	int left,right;
    	if (IsBalanced(pRoot->m_pLeft,&left)&&IsBalanced(pRoot->m_pRight,&right))
    	{
    		//深度差
    		int Dif=left-right;
    		if (Dif<=1&&Dif>=-1)
    		{
    			*depth=1+(left>right?left:right);
    			return true;
    		}
    	}
    	return false;
    }
    
    //推断是否是平衡二叉树
    bool IsBalanced(BinaryTreeNode *pRoot)
    {
    	int depth=0;
    	return IsBalanced(pRoot,&depth);
    }


  • 相关阅读:
    hdu3709(数位dp)
    2012天津E题
    2012天津C题
    hdu1754(splay)
    赤裸裸的splay平衡树
    hdu(预处理+线段树)
    uva11922(强行用rope替代spaly)
    lightoj 1370 欧拉函数
    poj3294 出现次数大于n/2 的公共子串
    poj2774 后缀数组2个字符串的最长公共子串
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5319058.html
Copyright © 2011-2022 走看看