判斷的思路很簡單,若一棵樹是平衡二叉樹,它的左右子樹都是平衡二叉樹,並且左右子樹的高度差小於等於1。注意,實現的時候,判斷左右子樹的平衡性時,可以順便計算子樹高度,不用再另外計算一次,下面是其遞迴實現:
#include using namespace std;
struct treenode
};class solution
bool mybalance(treenode *root, int &height)
int leftheight;
int rightheight;
bool leftbalance=mybalance(root->left,leftheight);//root的左子樹平衡嗎?
bool rightbalance=mybalance(root->right,rightheight);//root的右子樹平衡嗎?
height=max(leftheight,rightheight)+1;//以root為根的這棵樹的高度,是root的左子樹、右子樹中的較高者加上root本身這個結點(即加1)
if(leftbalance && rightbalance && abs(leftheight-rightheight)<=1)//如果左子樹平衡,右子樹平衡,並且左右子樹高度差小於等於1
return true;
return false;
}};int main()
{ treenode *root=new treenode(1);
treenode *left=new treenode(2);
treenode *right=new treenode(3);
root->left=left;
root->right=right;
solution *s=new solution();
cout 題目 程式設計題 平衡二叉樹 時間限制 1000 ms,記憶體限制 256000 kb,長度限制 8000 b 判斷乙個二叉樹是不是平衡 說明 一棵二叉樹任意乙個節點的左右子樹的深度差不大於1,即為平衡二叉樹。給定乙個有n個節點的二叉樹,每個節點有乙個序號表示,樹有m條分支。每個分支用三個數字a b... 平衡二叉樹 空樹或者左右兩個孩子高度差不超過1 在涉及到二叉樹的題目時,遞迴函式非常好用 列出可能性 整理出返回值的型別 整個遞迴過程按照同樣的結構得到子樹的資訊,整合子樹的資訊,加工出應該返回的資訊,向上返回 1.左子樹是否平衡 2.右子樹是否平衡 3.左子樹的高度 4.右子樹的高度 根據可能性,... 1 基礎知識 二叉樹 二叉樹是一棵特殊的樹,二叉樹每個節點最多有兩個孩子結點,分別稱為左孩子和右孩子。滿二叉樹 高度為n的滿二叉樹有2 n 1個節點的二叉樹。完全二叉樹 若設二叉樹的深度為h,除第h 層外,其它各層 1 h 1 的結點數都達到最大個數,第h 層所有的結點都連續集中在最左邊,這就是完全...判斷一棵樹是否是平衡二叉樹
二叉樹 判斷一棵樹是否是平衡二叉樹
判斷一棵樹是否是完全二叉樹