二叉树的深度

来源:互联网 发布:职场色诱 知乎 编辑:程序博客网 时间:2024/06/04 18:58

点:二叉树


题意:相当于二叉树的最高层数,如果只有一个节点则为1,否则为最低一层叶子节点所在层

剑指offer面试题39


思路:按后序遍历,不断递归获取左右子树直到叶子节点为止,按左右子树深度最高者


代码“:

#include <iostream>#include <random>template<class T> struct Node {    T val;    Node<T> *lchild;    Node<T> *rchild;    Node(T _val):val(_val), lchild(nullptr), rchild(nullptr) {}};template<class T> class Btree {    Node<T> *root;public:    Btree():root(nullptr){}    void Free (Node<T> *cur) {        if (cur) {            Free(cur->lchild);            Free(cur->rchild);            delete cur;            cur = nullptr;        }    }    ~Btree () {        Free(root);    }    void Add (int val) {        if (!root) {            root = new Node<T>(val);        } else {            Node<T> *cur = root;            while (cur) {                if (cur->val > val) {                    if (cur->lchild) {                        cur = cur->lchild;                    } else {                        Node<T> *newnode = new Node<T>(val);                        cur->lchild = newnode;                    }                } else if (cur->val < val) {                    if (cur->rchild) {                        cur = cur->rchild;                    } else {                        Node<T> *newnode = new Node<T>(val);                        cur->rchild = newnode;                    }                } else {                    break;                }            }        }    }    void Pre (Node<T> *cur) {        if (cur) {            std::cout << cur->val << "\t";            Pre(cur->lchild);            Pre(cur->rchild);        }    }        void pre () {        Pre(root);        std::cout << std::endl;    }        int depth (Node<T> *cur, int dep) {        if (cur) {            int ld = depth(cur->lchild, dep + 1);            int rd = depth(cur->rchild, dep + 1);            return (ld > rd)?ld:rd;        } else {            return dep - 1;        }    }        int Depth () {        depth(root, 1);    }};int main () {    std::random_device rd;    Btree<int> bt;    for (int i = 0; i < 15; i++) {        bt.Add(rd() % 100);    }    bt.pre();    std::cout << bt.Depth() << std::endl;    return 0;}



原创粉丝点击