一.判斷一顆二叉樹是否為平衡二叉樹
題目:輸入一顆二叉樹的根節點,判斷該二叉樹是否為平衡二叉樹。所謂的平衡二叉樹是指以當前結點為根結點的樹,左右子樹的深度不得超過1。
例如:解決思路一:
按照前序遍歷的路線判斷。
**實現:
//二叉樹的高度(比較左右子樹那個高,高的加1既為二叉樹的高度)
int binarytreehigh(btnode* root)
int ret1 = binarytreehigh(root->_left);
int ret2 = binarytreehigh(root->_right);
//二叉樹的高度為左子樹和右子樹中高的那個高度加1
return ret1 > ret2 ? ret1 + 1 : ret2 + 1;
}//判斷樹是否為平衡二叉樹(1:是 0:不是)
int isblancedtree_r(btnode* root)
對於上邊的**,效率會很低
,因為這種方法存在著許多重複的計算
。以上圖的例子分析,從12
開始判斷,用binarytreehigh
函式求深度時,要遍歷35、9,
而在判斷以35
位根的樹是否為平衡二叉樹時也要遍歷9
。因此,這種方法存在著許多重複的計算。那麼我們怎麼能讓它們不重複呢?
解決思路二:按照後序遍歷的路線判斷
**實現:
//判斷樹是否為平衡二叉樹(1:是 0:不是)
//優化版本(不用遍歷重複的結點)
int isblancedtree_op(btnode* root, int *pdepth)
//按照後序遍歷去判斷,先判斷左右子樹,然後記錄以當前結點為根樹的深度
int left, right;
if (isblancedtree_op(root->_left, &left) && isblancedtree_op(root->_right, &right))
}return
0;}
判斷一顆二叉樹是否是平衡二叉樹
方法一,參考 template typename t intdepthtree bstreenode pbs template typename t bool isbalancetree bstreenode pbs intdepthleft depthtree pbs left intdepthr...
判斷一顆二叉樹是否是平衡二叉樹
輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。definition for a binary tree node.public class treenode class solution int left treede...
輸入一顆二叉樹,判斷該二叉樹是否為平衡樹
package dlinkedlist author zhou jian date 2020 2020 3 27 0027 17 04 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。左右兩顆子樹的深度相差不超過1 public class problem26 左右子樹的深度的差大於1的話則返回fal...