求一颗二叉树中最远的两个节点的距离

#include <iostream>
using namespace std;
typedef struct tagNode
{
	char data;
	tagNode *lchild;
	tagNode *rchild;
}*PNode;
void createtree(PNode &T)
{
	char c;
	cin >> c;
	if(c == ',')return;
	else
	{
		T = new tagNode;
		T->data = c;
		T->lchild = NULL;
		T->rchild = NULL;
		createtree(T->lchild);
		createtree(T->rchild);
	}
}

int helper(const PNode T, const PNode root)
{
	if( T == NULL)return 0;

	int ldepth = helper(T->lchild,root);
	int rdepth = helper(T->rchild,root);
	if( T == root)
		return ldepth+rdepth+1;
	else
	 	return max(ldepth,rdepth)+1;
}
int TreeMaxDistance(PNode T)
{
	helper(T,T);
}

int main()
{
	PNode T = NULL;
	createtree(T);
	if( T == NULL)return 0;
	cout << TreeMaxDistance(T) << endl;;
} 

时间: 2024-11-05 23:37:07

求一颗二叉树中最远的两个节点的距离的相关文章

求一个二叉树中距离最远的两个节点

/*求二叉树中距离最远的两个点 * 基本思路: * 递归计算两棵树的最大高度,设置一个全局变量,距离最远的两个节点element * 其中:在计算左子支,直接刷新上述全局变量,在计算右边子支时,设置两个临时Node变量,变量里的element用于 * 保存右边子支的两个最远距离.根据比较两个距离的大小.其父节点所在的树三个的大小,来重新刷新全局变量. * 一个Trick~:在计算子支的最远距离的时候,因为要和其父节点所在的树比较大小,保存子支的最大距离的点数. */ public class M

求二叉树中相差最大的两个节点间的差值绝对值

题目描述: 写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值.请注意程序效率. solution: int findMinMax(BTNode *T) { if(!T) return 0; int max = INT_MIN; int min = INT_MAX; stack<BTNode*> s; s.push(T); while (!s.empty()) { BTNode *tmp = s.top(); if(tmp->d

笔试算法题(36):寻找一棵二叉树中最远节点的距离 &amp; 根据二叉树的前序和后序遍历重建二叉树

出题:求二叉树中距离最远的两个节点之间的距离,此处的距离定义为节点之间相隔的边数: 分析: 最远距离maxDis可能并不经过树的root节点,而树中的每一个节点都可能成为最远距离经过的子树的根节点:所以计算出以每个节点为根节点的子树的最 远距离,最后取他们的最大值就是整棵树的最远距离: 如果递归层次过多造成系统栈溢出,则可以使用stack堆栈结构存储递归节点,从而使用循环实现 解题: 1 struct Node { 2 int value; 3 Node *left; 4 Node *right

二叉树(12)----查找两个节点最低祖先节点(或最近公共父节点等),递归和非递归

1.二叉树定义: typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t; 2.查找二叉树中两个节点的最低祖先节点(或最近公共父节点等) 最低祖

二叉树进阶之求一棵二叉树中结点间最大距离

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6618074.html 二叉树中的结点间距离:从结点A出发到达B,每个结点只能走一次,AB路径上的结点数就是AB间距离. 由于从一个结点出发时,只有两种方向可走:向上经过父节点到达它的兄弟子树:向下到达它自己的左右子树: 对于一个结点h为根的子树:假设现在从h左子树中最深的叶结点逐层向上走,一直走到h的左儿子,现在h.left有两种选择: 一是向上经过h,然后到达h的右子树向下走到最深叶结点: 二是从h.le

【剑指offer】8、二叉树中序遍历的下一个节点

题目 给定一个二叉树和其中一个节点,找出中序遍历的下一个节点.注意:树的节点中除了有指向左右节点的指针,还有指向父节点的指针. 思路 (1)若该节点Node有右子树,则下一个节点就是右子树中的最左节点,就是在右节点中一直往左子树找. (2)若Node没有右子树 (i)Node是左子节点,则下一个节点就是node的父节点. (ii)Node是右子节点,则下一个节点就要一直向上找,找到第一个左子节点,也就是第一种情况. /* struct TreeLinkNode { int val; struct

Tree UVA - 548 已知中序遍历和后序遍历,求这颗二叉树。

You are to determine the value of the leaf node in a given binary tree that is the terminal node of a path of least value from the root of the binary tree to any leaf. The value of a path is the sum of values of nodes along that path. Input The input

设计一个算法,求非空二叉树中指定的第k层(k&gt;1)的叶子节点的个数

思想:采用基于层序遍历的方法.用level扫描各层节点,若某一层的节点出队后,rear指向该层中最右节点,则将rear赋值给last(对于第一层,last=1).在出队时,若front=last,表示这一层处理完毕,让层号level增1,并置last为下一层最右节点.那么如何求一层的最右节点呢?这是因为第一层只有一个节点,它就是最右节点.对于其他层,上一层最右节点最后进队的孩子一定是该层的最右节点. 例如,对于如图所示的二叉树,求k=3的叶子节点个数的过程如下:level=1;A进队时rear=

求 一棵二叉树中权值最大和最小的叶节点之间的距离

#include <iostream> #include <vector> //结点的数据结构 struct Node { int _data; int _weight; Node* _left; Node* _right; Node(const int& x = 0,int weight=0) :_left(NULL) , _right(NULL) , _data(x) , _weight(weight) {} }; //建树 Node* CreateTree(const