求一个二叉树的深度以及如何判断一个二叉树是一个平衡二叉树

/** * Created by Administrator on 2015/10/10. */public class TreeNode {    //树节点的值    private char data;    //节点的左子树    private TreeNode leftTree;    //节点的右子树    private TreeNode rightTree;    public TreeNode(char data,TreeNode leftTree,TreeNode rightTree){        this.data=data;        this.leftTree=leftTree;        this.rightTree=rightTree;    }    public int getData() {        return data;    }    public void setData(char data) {        this.data = data;    }    public TreeNode getLeftTree() {        return leftTree;    }    public void setLeftTree(TreeNode leftTree) {        this.leftTree = leftTree;    }    public TreeNode getRightTree() {        return rightTree;    }    public void setRightTree(TreeNode rightTree) {        this.rightTree = rightTree;    }    public static int getDepth(TreeNode pNode){        if(pNode==null){            return -1;        }        TreeNode leftTree=pNode.getLeftTree();        TreeNode rightTree=pNode.getRightTree();        if(leftTree==null||rightTree==null){            return 0;        }        int leftDepth=getDepth(leftTree);        int rightDepth=getDepth(rightTree);        int depth=leftDepth>rightDepth?leftDepth:rightDepth;        return depth+1;    }    //判断二叉树是否为一个平衡二叉树    public static boolean isBalance(TreeNode pNode){        if (pNode==null){            return true;        }        TreeNode leftTree=pNode.getLeftTree();        TreeNode rightTree=pNode.getRightTree();        int leftDepth=getDepth(leftTree);        int rightDepth=getDepth(rightTree);        if(leftDepth-rightDepth>1||rightDepth-leftDepth>1){            return false;        }        if(isBalance(leftTree)){            return isBalance(rightTree);        }else{            return false;        }    }    //测试    public static void main(String[] args){        //TreeNode D=new TreeNode(‘D‘,null,null);        TreeNode E=new TreeNode(‘E‘,null,null);        TreeNode F=new TreeNode(‘F‘,null,null);        TreeNode C=new TreeNode(‘C‘,E,F);        //TreeNode B=new TreeNode(‘B‘,D,null);        TreeNode A=new TreeNode(‘A‘,null,C);        System.out.println(isBalance(A));        //System.out.println(getDepth(A));    }}
时间: 2024-10-08 20:04:41

求一个二叉树的深度以及如何判断一个二叉树是一个平衡二叉树的相关文章

求二叉树的深度 python

题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.解题思路 两种解法,一种是第一时间的思路,即获得根节点到每个叶节点的深度,取其中最长的返回: class Solution:    def __init__(self):        self.maxDeep = 0        self.curDeep = 0 def TreeDepth(self, pRoot):        if not pRoot:   

求一个二叉树的深度

求一个二叉树的深度,是这样理解这个问题的. 如果这个棵树为空,那么他的深度为0 如果一个树只有一个节点,那么他的深度为1 如果根节点只有左子,没有右子,那么他的深度为左子树的深度+1 如果根节点只有右子,没有左子,那么他的深度为右子树的深度+1 如果根节点既有左子,又有右子,那么他的深度为左子右子较大的那个深度+1 struct BNode { int data;   //数据域 BNode* left;//左子 BNode* right;//右子} int TreeDepth(BNode* n

二叉树的深度与二叉平衡树判断

我的代码:直接用了以前那个求二叉树某一个条路径的和为特定值的思想 源代码 struct TreeNode{ int val; struct TreeNode *left; struct TreeNode *right; }; #ifndef BINARY_TREE_DEEP_H #define BINARY_TREE_DEEP_H #include "reconstructBinaryTree.h" #include<stack> #include<set> v

求二叉树的深度和宽度 ----我对默认构造函数的理解

////计算二叉树的深度和宽度:深度:层数   宽度:各层最大节点数 ///关于二叉树问题,一般都要用到递归的方法. ////算法:首先构造二叉树节点的结构:要创建二叉树,创建的过程,使用递归算法:其次,计算二叉树深度,也要递归:最难的一点是计算求出层次中的最大节点数,使用队列的方法 #include <iostream>#include <queue>#include <tchar.h>using namespace std;struct BTNode{ char m

判断任一二叉树,是否为满二叉树.(输出二叉树,节点总数,二叉树深度)

#include "stdio.h"#include "malloc.h"int count;typedef struct node{ char data; struct node *LChild; struct node *RChild;}BiTNode,*BiTree; void creatbitree(BiTree * bt) // 先序便历序列创建二叉树链表{ char ch=getchar(); if (ch=='#') {  *bt=NULL; } el

[华为机试练习题]42.求二叉树的深度和宽度

题目 题目标题: 求二叉树的宽度和深度 给定一个二叉树,获取该二叉树的宽度和深度. 例如输入 a / b c / \ / d e f g 返回3. 接口说明 原型: int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight) 输入参数: head 需要获取深度的二叉树头结点 输出参数(指针指向的内存区域保证有效): pulWidth 宽度 pulHeight 高度 返回值: 0 成功 1 失败或

剑指offer38:输入一棵二叉树,求该树的深度

1 题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 2 思路和方法 深度优先搜索,每次得到左右子树当前最大路径,选择其中较大者并回溯.int len = left>right?left+1:right+1;    // 当前最大路径 3 C++ 核心代码 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *

PTA 求二叉树的深度

6-7 求二叉树的深度 (6 分) 本题要求实现一个函数,可返回二叉树的深度. 函数接口定义: int Depth(BiTree T); T是二叉树树根指针,函数Depth返回二叉树的深度,若树为空,返回0. 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typedef char ElemType; typedef struct BiTNode { ElemType data; struct BiTNode *lchild, *r

二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)

将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: 1 typedef struct TreeNode{ 2 int data; 3 struct TreeNode *left; 4 struct TreeNode *right; 5 }TreeNode; 2.创建根节点: 1 TreeNode *creatRoot(){ 2 TreeNode * root =(TreeNode *)malloc(sizeof(TreeNode)); 3 if(NULL=