65_二叉树中属性操作的实现

关键词:二叉树中结点的数目、二叉树的高度、二叉树的度树

0. 二叉树中结点的数目

  • 定义功能函数count(node):在node为根结点的二叉树中统计结点数目
    count函数的递归调用示意图
    int count(BTreeNode* node) const
    {
        return node ? count(node->left) + count(node->right) + 1 : 0;
    }

    int count() const
    {
        return count(root());
    }

1. 二叉树的高度

  • 定义功能函数height(node):获取node为根结点的二叉树的高度
    height函数的递归调用示意图
    int height(BTreeNode* node) const
    {
        int ret = 0;

        if( node != NULL )
        {
            int l = height(node->left);
            int r = height(node->right);

            ret = (l > r ? l : r) + 1;
        }

        return ret;
    }

    int height() const
    {
        return height(root());
    }

2. 二叉树的度树

  • 定义功能degree(node):获取node为根结点的二叉树的度数
    degree函数的递归调用示意图
    int degree(BTreeNode* node) const
    {
        int ret = 0;

        if( node != NULL )
        {
            BTreeNode* child[] = {node->left, node->right};  // 通过数组去掉代码冗余
            ret = (!!node->left) + (!!node->right);     // 通过两次取反,如果该node的child为空,则值为0,若为非空,则为1

            for(int i=0; (i<2) && (ret<2); ++i)         // 当ret == 2时,跳出循环,在二叉树中度最大为2,因此不需要继续递归,提高了效率
            {
                int d = degree(child[i]);

                if( ret < d )
                {
                    ret = d;
                }
            }
        }

        return ret;
    }

    int degree() const
    {
        return degree(root());
    }

声明:此文章仅是本人在学习狄泰学院《数据结构实战开发教程》所做的笔记,文章中包含狄泰软件资料内容,一切版权归狄泰软件所有!
实验环境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4

你可能感兴趣的:(65_二叉树中属性操作的实现)