♥求二叉树高度(递归代码实现)♥

直接看代码:

#include<iostream>
#include<string>
using namespace std;

//代码简单易懂,没什么好说的
class Node{
    char data;
    Node *left,*right;
public:
    Node(char ch){
        data=ch;
        left= nullptr;
        right= nullptr;
    }
    void setLeft(Node *left) {
        Node::left = left;
    }
    void setRight(Node *right) {
        Node::right = right;
    }
    char getData() const {
        return data;
    }
    Node *getLeft() const {
        return left;
    }
    Node *getRight() const {
        return right;
    }
};

class Tree{
    Node* root;
    string strTree;
    int pos;
public:
    void create(string s){
        pos=0;
        strTree=s;
        root= createTree();
    }

    Node* createTree(){
        Node *t;
        char ch= strTree.at(pos++);
        if(ch=='0'){
            t= nullptr;
        }else{
            t=new Node(ch);
            t->setLeft(createTree());
            t->setRight(createTree());
        }
        return t;
    }
    int treeDepth(Node *t){
        if(t== nullptr){
            return 0;
        }
        //直接递归到最左边的叶子结点,然后left回溯的时候每一层都会加1
        int leftDepth= treeDepth(t->getLeft());
        //左节点回溯的过程中把当前结点的右子树递归访问
        int rightDepth= treeDepth(t->getRight());
        //故在每一个分岔点,得到的是其左右子树的最大高度(深度)
        return leftDepth>rightDepth?leftDepth+1:rightDepth+1;
    }

    Node *getRoot() const {
        return root;
    }
};

int main(){
    //n次循环,计算n个二叉树的高度
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        //s为二叉树的“字符串形式”
        string s;
        cin>>s;
        Tree *tree=new Tree();
        tree->create(s);
        int depth=tree->treeDepth(tree->getRoot());
        cout<<depth<<endl;
    }
    return 0;
}

我是花花,祝自己也祝您变强了~

猜你喜欢

转载自blog.csdn.net/m0_52711790/article/details/120865792
今日推荐