程式設計之美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...