求二叉樹的最大深度(遞迴 非遞迴)

2021-10-07 03:26:40 字數 943 閱讀 1597

力扣104也有該題,可以使用上面進行驗證。

當節點為空時,返回0。

不為空時,當前節點為根節點的子樹深度為:左子樹深度 + 右子樹深度 + 1。

/**

* 求二叉樹的最大深度

* @param root

* @return

*/public int maxdepth(treenode root)

return math.max(maxdepth(root.left), maxdepth(root.right)) + 1;

}

非遞迴求解,可以使用廣度優先遍歷:

廣度優先遍歷,使用佇列來輔助。

可以按照層來進行,當遍歷完成一層後,深度+1。

每一層開始遍歷之前,當前層的寬度(當前層的節點數) = 當前佇列的元素數量,這一點非常重要。

/**

* 求二叉樹的最大深度

* @param root

* @return

*/public int maxdepth2(treenode root)

linkedlistlinkedlist = new linkedlist<>();

linkedlist.add(root);

int width = linkedlist.size();//當前層,二叉樹的寬度,根節點時,寬度為1

int d = 0;//二叉樹深度

treenode tmp;

while (!linkedlist.isempty())

if (tmp.right != null)

width--;

}d++;//遍歷完成一層後,深度+1。

width = linkedlist.size();//重置下一層節點的寬度。

}return d;

}

遞迴與非遞迴求二叉樹深度

分別用遞迴與非遞迴演算法求二叉樹深度。方法一 遞迴方法大家都很熟悉,如何用非遞迴求解呢?我們知道二叉樹有層序遍歷,利用層序遍歷的過程,記錄當前層數,那麼遍歷結束後也就求得二叉樹的層數,即深度。方法二 層序遍歷需要使用乙個佇列來儲存樹的節點。初始化講根節點入隊。接著只要佇列不為空,則出隊,並將出隊元素...

二叉樹深度求解(遞迴,非遞迴)

遞迴實現基本思想 為了求得樹的深度,可以先求左右子樹的深度,取二者較大者加1即是樹的深度,遞迴返回的條件是若節點為空,返回0 演算法 1 intfindtreedeep bintree bt 8return deep 9 非遞迴實現基本思想 受後續遍歷二叉樹思想的啟發,想到可以利用後續遍歷的方法來求...

二叉樹 遞迴 非遞迴

include include include include using namespace std typedef struct node bintree typedef struct node1 btnode void creatbintree char s,bintree root 建立二叉...