若是咱們把二叉樹當作一個圖,父子節點之間的連線當作是雙向的,node
咱們姑且定義"距離"爲兩節點之間邊的個數。編程
將問題轉化爲在子樹上的解,從而利用動態規劃來解決。
spa
typedef struct node { int data; struct node * left; struct node * right; int maxleft; int maxright; }BTree; int maxlen = 0; void FindMaxLen(BTree * root) { int tmp; if(root == NULL) return ; if(root->left == NULL) root->maxleft = 0; if(root->right == NULL) root->maxright = 0; if(root->left != NULL) FindMaxLen(root->left); if(root->right != NULL) FindMaxLen(root->right); if(root->left != NULL) { tmp = (root->left->maxleft > root->left->maxright) ?(root->left->maxleft):(root->left->maxright); root->maxleft = tmp + 1; } if(root->right != NULL) { tmp = (root->right->maxleft > root->right->maxright) ?(root->right->maxleft):(root->right->maxright); root->maxright = tmp + 1; } maxlen = (root->maxleft + root->maxright) > (maxlen) ?(root->maxleft + root->maxright):maxlen; }
感謝 dragon_blog 指出文中的錯誤,已修改code
參考資料:blog
《編程之美》 電子工業出版社出版 3.8求二叉樹中節點的最大距離class