二叉树的深度及平衡二叉树40

来源:互联网 发布:盛势网络剧07bilibili 编辑:程序博客网 时间:2024/06/08 04:09

题目一:输入一颗二叉树的根节点,求该树的深度。从根节点直到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径长度为树的深度。
二叉树结点定义:

struct BinTreeNode{  int m_value;  BinTreeNode *left;  BinTreeNode *right;  //创建根节点,值为e  BinTreeNode* createRoot(int e);  //将e作为当前结点的左孩子值插入  void insertAsLC(int e);  //将e作为当前结点的右孩子值插入  void insertAsRC(int e);};

解法(递归):

//题目一,求二叉树的深度int TreeDepth(BinTreeNode *pRoot){    if(pRoot == NULL)        return 0;    int left = TreeDepth(pRoot->left);    int right = TreeDepth(pRoot->right);    return (left > right) ? left + 1 : right + 1;}

题目二:输入一颗二叉树的节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子节点的深度相差不超过1,那么它就是一棵平衡二叉树。

解题思路:利用二叉树后序遍历的特点 LRV

测试用例:

int main(){    //创建一颗A树    BinTreeNode *A = new BinTreeNode;    A->m_value = 8;    A->insertAsLC(8);    A->insertAsRC(7);    A->left->insertAsLC(9);    A->left->insertAsRC(2);    A->left->right->insertAsLC(4);    A->left->right->insertAsRC(7);    //A树深度    std::cout << TreeDepth(A) << std::endl;  //Output: 4    //判断二叉树是否是平衡二叉树    std::cout << IsBalancedTree(A);  //Output: 0    return 0;}

函数实现:

//题目二:判断二叉树是否是平衡二叉树bool IsBalancedTree(BinTreeNode *pRoot, int *pDepth){  //pDepth: 记录深度    if(pRoot == NULL){        *pDepth = 0;        return true;  //如果是0当然平衡...    }    int left, right;    if(IsBalancedTree(pRoot->left, &left) && IsBalancedTree(pRoot->right, &right)){        int diff = left - right;        if(diff <= 1 && diff >= -1){            *pDepth = 1 + (left > right ? left : right);            return true;        }    }    return false;}//主函数bool IsBalancedTree(BinTreeNode *pRoot){    int depth = 0; //记录深度    return IsBalancedTree(pRoot, &depth);}

其他函数:

//其他函数实现//创建根节点,值为eBinTreeNode* BinTreeNode::createRoot(int e){     BinTreeNode *root = new BinTreeNode;     root->m_value = e;     return root; }//作为节点的左孩子插入元素evoid BinTreeNode::insertAsLC(int e){    BinTreeNode *Left = new BinTreeNode;    Left->m_value = e;    this->left = Left;}//作为节点的右孩子插入元素evoid BinTreeNode::insertAsRC(int e){    BinTreeNode *Right = new BinTreeNode;    Right->m_value = e;    this->right = Right;}
0 0
原创粉丝点击