判斷一顆二叉樹是否為平衡二叉樹

2021-08-28 04:54:29 字數 1295 閱讀 4575

一.判斷一顆二叉樹是否為平衡二叉樹

題目:輸入一顆二叉樹的根節點,判斷該二叉樹是否為平衡二叉樹。所謂的平衡二叉樹是指以當前結點為根結點的樹,左右子樹的深度不得超過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...