c++ - 计算一棵树的高度

标签 c++ data-structures binary-search-tree

我想计算一棵树的高度。我正在使用下面编写的代码来完成。

#include<iostream.h>

struct tree
{
    int data;
    struct tree * left;
    struct tree * right;
};

typedef struct tree tree;

class Tree
{
private:
    int n;
    int data;
    int l,r;
public:
    tree * Root;
    Tree(int x)
    {
        n=x;
        l=0;
        r=0;
        Root=NULL;
    }
    void create();
    int height(tree * Height);

};

void Tree::create()
{
    //Creting the tree structure
} 

int Tree::height(tree * Height)
{
    if(Height->left==NULL && Height->right==NULL)
    {return 0;
    }
    else
    {
        l=height(Height->left);
        r=height(Height->right);

        if (l>r)
        {l=l+1;
        return l;
        }
        else
        {
            r=r+1;
            return r;
        }
    }
}

int main()
{
    Tree A(10);//Initializing 10 node Tree object
    A.create();//Creating a 10 node tree

    cout<<"The height of tree"<<A.height(A.Root);*/

}

它给了我正确的结果。

但是在some posts (谷歌搜索页面)建议进行后序遍历并使用这种高度方法来计算高度。有什么具体原因吗?

最佳答案

但是后序遍历不正是您正在做的吗?假设 left 和 right 都是非空的,你首先做 height(left),然后 height(right),然后在当前节点做一些处理。根据我的说法,这是后序遍历。

但我会这样写:

int Tree::height(tree *node) {
    if (!node) return -1;

    return 1 + max(height(node->left), height(node->right));
}

编辑:根据您定义树高的方式,基本情况(对于空树)应为 0 或 -1。

关于c++ - 计算一棵树的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2279147/

相关文章:

c++ - 如何防止类的重定义?

c++ - 有没有办法找出线程是否被阻塞?

algorithm - 递归思维的算法是什么? (在具体例子上)

c++ - 首选哪种数据结构而不是操作多个 vector

java - 递归地找到二叉搜索树中每个节点的总深度?

c++ - 在 BST 的后序遍历中的递归调用期间用整数更新指针值

data-structures - 为什么要使用二叉搜索树?

c++ - 自定义 Qt 小部件

c++ - Eclipse CDT - 使用模板默认值时为 "Invalid arguments"

c++ - 用于存储和搜索比赛结果的数据结构