也許這個問題不屬於,因爲這本身不是一個編程問題,如果是這樣的話,我會道歉。二叉樹中排名的總和 - 有沒有更好的方法
我只是在抽象的數據結構考試,並有這樣的疑問:
樹節點的等級的定義是這樣的:如果你是樹的根,你的等級是0。否則,您的排名是您父母的排名+1。
設計一種算法來計算二叉樹中所有節點的排名總和。你的算法的運行時間是多少?
我的回答,我相信可以解決這個問題,我的僞代碼是這樣的:
int sum_of_tree_ranks(tree node x)
{
if x is a leaf return rank(x)
else, return sum_of_tree_ranks(x->left_child)+sum_of_tree_ranks(x->right_child)+rank(x)
}
其中函數排名是
int rank(tree node x)
{
if x->parent=null return 0
else return 1+rank(x->parent)
}
這很簡單,一棵樹的行列總和是左子樹+右子樹+根的和的總和。
我相信這個算法的運行時間是n^2
。我相信這是因爲我們沒有給出二叉樹是平衡的。可能是樹中有n
數字,但也有n
不同的「級別」,如在樹中看起來像鏈接列表而不是樹。所以要計算一片葉子的等級,可能我們會逐步提高。葉的父親將n-1臺階等...所以多數民衆贊成在n+(n-1)+(n-2)+...+1+0=O(n^2)
我的問題是,這是正確的?我的算法能解決問題嗎?我對運行時的分析是否正確?最重要的是,有沒有更好的解決方案來解決這個問題,那不在n^2
中運行?
在這種情況下r是什麼? – 2014-10-05 16:58:23
最後一行:以root開頭,r爲0. – 2014-10-05 16:59:44