求二叉樹中節點的最大距離

求二叉樹中節點的最大距離

題目:

    若是咱們把二叉樹當作一個圖,父子節點之間的連線當作是雙向的,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

相關文章
相關標籤/搜索