二叉树的深度

原创 2015年07月10日 19:29:21



int TreeDepth(BinaryTreeNode* pRoot)
{
if (pRoot == NULL)
return 0;
int nLeft = TreeDepth(pRoot->m_pLeft);
int nRight = TreeDepth(pRoot->m_pRight);
return (nLeft > nRight) ? (nLeft + 1) : (nRight + 1);
}


惊恐解法一:


bool IsBalanced(BinaryTreeNode* pRoot)
{
if (pRoot == NULL)
return true;
int left = TreeDepth(pRoot->m_pLeft);
int right = TreeDepth(pRoot->m_pRight);
int diff = left - right;
if (diff > 1 || diff < -1)
return false;
return IsBalanced(pRoot->m_pLeft) && IsBalanced(pRoot->m_pRight);
}


惊恐解法二:


一边遍历一边判断每个结点是不是平衡的。

bool IsBalanced(BinaryTreeNode* pRoot, int* pDepth)
{
if (pRoot == NULL)
{
*pDepth = 0;
return true;
}
int left, right;
if (IsBalanced(pRoot->m_pLeft, &left) && IsBalanced(pRoot->m_pRight, &right))
{
int diff = left - right;
if (diff <= 1 && diff >= -1)
{
*pDepth = 1 + (left > right ? left : right);
return true;
}
}
return false;
}

我们只需要给上面的函数传入二叉树的根节点及一个表示结点深度的整型变量即可:

bool IsBalanced(BinaryTreeNode* pRoot)
{
int depth = 0;
return IsBalanced(pRoot, &depth);
}






二叉树的一些基本操作(括号表示法,宽度,深度,结点个数,叶子节点个数)

问题描述 (1)根据二叉树的括号表示法建立二叉树 (2)根据二叉树获取其括号表示法字符串 (3)输出二叉树的深度 (4)输出二叉树的宽度 (5)输出二叉树的结点的个数 (6)输出...

二叉树广度和深度优先遍历

  • 2013年04月20日 16:56
  • 3KB
  • 下载

二叉树的叶子结点数及深度

  • 2012年04月03日 10:31
  • 901B
  • 下载

C++算法之 求二叉树的节点个数、深度、四种遍历方法

//节点的数据结构 class BTree { public: int m_nValue; BTree* m_nLeft; BTree* m_nRight; ...

二叉树求深度

  • 2012年12月16日 15:56
  • 13KB
  • 下载

基本数据结构——二叉树的建立,遍历,求叶子节点,深度计算

/* 新建立一棵二叉树,遍历,查找树的高度,查找树的叶子节点,和总结点数计算距离最远的两个节点。 SQ 2014-04-20 */ #include struct Node{     ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树的深度
举报原因:
原因补充:

(最多只允许输入30个字)