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);
    }


  • 相关阅读:
    Lumen源码分析之 一步一步带你实现Lumen容器(一)
    php 注册器模式 工厂模式
    理解 PHP 依赖注入 和 控制反转
    composer使用git作为仓储
    monolog记录日志
    Jupyter Notebook快捷键
    图像灰度化
    一道算法题:拼数字
    [转]Vue生态系统中的库
    window.postMessage实现网页间通信
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5319058.html
Copyright © 2011-2022 走看看