zoukankan      html  css  js  c++  java
  • 二叉树

    二叉树的深度

    struct  BinaryTreeNode
    {
        int m_value;
        BinaryTreeNode *m_left;
        BinaryTreeNode *m_right;
    };

    输入一颗二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。(出自:剑指offer)

    如果一棵树只有一个结点,它的深度为1。如果根节点只有左子树而没有右子树,那么树的深度应该是左子树的深度加1;同样如果根节点只有右子树而没有左子树,那么树的深度应该是其右子树的深度加1.如果既有右子树又有左子树,那么该树的深度是其左右子树深度的较大值加1。

     1 int TreeDepth( BinaryTreeNode * pRoot )
     2 {
     3     if ( pRoot == NULL )
     4     {
     5         return 0;
     6     }
     7     int left = TreeDepth( pRoot->m_left );
     8     int right = TreeDepth( pRoot->m_right );
     9     return ( left > right ) ? ( left + 1 )  : ( right + 1 ); 
    10 }
    View Code

     判断是否为平衡二叉树

    输入一颗二叉树的根节点,判断是否是平衡二叉树。如果二叉树中任意的左右子树相差不超过1,那么它就是一颗平衡二叉树。

    如果用后序遍历的方式遍历二叉树的每一个节点,在遍历到一个节点之前我们就已经遍历了它的左右子树。只要在遍历每个节点的时候记录它的深度,就可以一边遍历一边判断每个节点是不是平衡的。

    bool IsBalanced( BinaryTreeNode *pRoot, int &depth )
    {
        if ( pRoot == NULL )
        {
            depth = 0;
            return true;
        }
    
        int left, right;
        if ( IsBalanced( pRoot->m_left, left ) && IsBalanced( pRoot->m_right, right ) )
        {
            int diff = left - right;
            if ( diff >= -1 && diff <= 1 )
            {
                depth = 1 + ( left > right ? left : right );
                return true;
            }
        }
        return false;
    }
    View Code
  • 相关阅读:
    谷歌 chrome 和 safari 浏览器 td innerHTML Textbox 部分显示不全
    SQLServer 日期转换字符串格式
    GNU 通用公共授權 第三版
    程序员的十个层次 你属于哪一层?
    一个因为缺少括号()引发的SQL存储过程不能执行的问题。
    关于实现字符串表达式求值
    Windows api数据类型【转载】
    x86—EFLAGS寄存器详解【转载】
    python PIL图像处理
    python学习笔记
  • 原文地址:https://www.cnblogs.com/leealvin/p/3169884.html
Copyright © 2011-2022 走看看