二叉樹節點的最大距離

2022-09-04 03:09:09 字數 2341 閱讀 9643

程式設計之美3.10節。完整**如下:

view code

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

using

namespace

std;89

struct

node

1018

};19

20void createtree(node** pnode,vector::iterator &begin,vector::iterator end)

2131

if (++begin!=end)

3235}36

}37}38

39 node* createtree(const

char*filename)

4049

if(vec.empty())

5053 node* proot=null;

54 createtree(&proot,vec.begin(),vec.end());

55return

proot;56}

5758

//程式設計之美上的遞迴方法

59void findmaxlen(node* proot,int&nmaxlen)

6065

if (!proot->m_lchild)

6669

if (!proot->m_nmaxright)

7073

if (proot->m_lchild)

7477

if (proot->m_rchild)

7881

//計算左子樹最長節點的距離

82if (proot->m_lchild)

8389

else

9093 proot->m_nmaxleft=ntmpmax+1;94

}95//計算右子樹最長節點的距離

96if (proot->m_rchild)

97103

else

104107 proot->m_nmaxright=ntmpmax+1

;108

}109

if (proot->m_nmaxleft+proot->m_nmaxright>nmaxlen)

110113

}114

115//

使用佇列和棧的非遞迴方法

116void findmaxlen2(node* proot,int&nmaxlen)

117122 stackmy_stack;

123 queuemy_queue;

124my_queue.push(proot);

125//

利用佇列實現層次遍歷樹,

126//

在遍歷的同時將遍歷的節點

127//

壓入棧128

while(!my_queue.empty())

129137

if (tmp->m_rchild)

138141

}142

//跳出棧中的每乙個元素,從下向上計算每乙個節點

143//

的nmaxleft和nmaxright,有點dp的思想

144while(!my_stack.empty())

145155

else

156159 tmp->m_nmaxleft=ntmpmax+1

;160

}161

//計算右子樹最長節點的距離

162if (tmp->m_rchild)

163169

else

170173 tmp->m_nmaxright=ntmpmax+1

;174

}175

if (tmp->m_nmaxleft + tmp->m_nmaxright >nmaxlen)

176179

}180

}181

182//

刪除樹的操作

183void destroytree(node*&proot)

184189 destroytree(proot->m_lchild);

190 destroytree(proot->m_rchild);

191delete proot;

192}

193int

main()

194

注意一下幾點:

1. 方法2實現了非遞迴演算法,用佇列和棧完成對節點的層次遍歷和記錄,不知道有沒有更好的方法。

求二叉樹節點的最大距離

即二叉樹中相距最遠的兩個節點之間的距離。遞迴解法 1 如果二叉樹為空,返回0,同時記錄左子樹和右子樹的深度,都為0 2 如果二叉樹不為空,最大距離要麼是左子樹的最大距離,要麼是右子樹的最大距離,要麼是左子樹節點中到根節點的最大距離 右子樹節點中到根節點的最大距離,同時記錄左子樹和右子樹節點中到根節點...

二叉樹節點間的最大距離

問題 從二叉樹節點 出發,可以向上或者向下走,但沿途的節點只能經過一次,當到達節點 時,路徑上的節點數叫做 到 的距離。基本思路 乙個以 為頭的樹上,最大的距離只可能來自以下三種情況 左子樹上的最大距離 右子樹上的最大距離 左子樹上離h.left最遠的距離 右子樹上離h.right最遠的距離 三個值...

二叉樹節點間的最大距離問題

題目 二叉樹中,乙個節點可以往上走和往下走,那麼從節點a總能走到節點b。節點a走到節點b的距離為 a走到b最短路徑上的節點個數。求一棵二叉樹上的最遠距離。public class maxdistanceintree public static class returntype public stat...