从键盘接受树节点以确定其高度

时间:2019-10-22 12:01:24

标签: c++

我有一个可以通过对值进行硬编码来确定树高的代码

我尝试使用类似容器的结构,但仍然没有成功,没有发布我在输入之前接受树节点的尝试,实际上杂乱无章,我决定发布包含硬编码树节点的代码,我需要的是该程序从键盘接收带有以下帮助程序描述的树节点

输入:

第一行是表示节点数的整数N。

接下来的每一行中,都有两个整数,包括a和b。b是a的子代。

示例:

5 // number of nodes
1 2
1 3
3 4
3 5

其中高度为3

// C++ program to find height of tree 
#include <bits/stdc++.h> 
using namespace std; 


/* A binary tree node has data, pointer to left child 
and a pointer to right child */
class node 
{ 
    public: 
    int data; 
    node* left; 
    node* right; 
}; 

/* Compute the "maxDepth" of a tree -- the number of 
    nodes along the longest path from the root node 
    down to the farthest leaf node.*/
int maxDepth(node* node) 
{ 
    if (node == NULL) 
        return 0; 
    else
    { 
        /* compute the depth of each subtree */
        int lDepth = maxDepth(node->left); 
        int rDepth = maxDepth(node->right); 

        /* use the larger one */
        if (lDepth > rDepth) 
            return(lDepth + 1); 
        else return(rDepth + 1); 
    } 
} 

/* Helper function that allocates a new node with the 
given data and NULL left and right pointers. */
node* newNode(int data) 
{ 
    node* Node = new node(); 
    Node->data = data; 
    Node->left = NULL; 
    Node->right = NULL; 

    return(Node); 
} 

// Driver code   
int main() 
{ 
    node *root = newNode(1); 

    root->left = newNode(2); 
    root->right = newNode(3); 
    root->left->left = newNode(4); 
    root->left->right = newNode(5); 

    cout << "Height of tree is " << maxDepth(root); 
    return 0; 
}

1 个答案:

答案 0 :(得分:1)

由于输入通过其数据值标识了父节点,因此我们需要一个辅助函数来找到它:

node *findNode(node *node, int data)
{
    if (!node) return 0;
    if (node->data == data) return node;
    class node *found;
    (found = findNode(node->left, data)) || (found = findNode(node->right, data));
    return found;
}

然后我们可以对输入处理进行编码,例如g。:

    node *node, *root = 0;  // initially empty
    int nn, a, b;
    cin>>nn;
    while (cin>>a>>b)
    {
        if (!root)
            root = newNode(a),
            node = root;
        else
            node = findNode(root, a);
        if (!node->left) node->left  = newNode(b);
        else             node->right = newNode(b);
    }