力扣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 建立二叉...