数据结构二叉树
2015-07-20 12:28
363 查看
求一棵二叉树中相距最远的两个节点之间的距离
分析可知:对于二叉树,若要两个节点U,V相距最远,有两种情况:
A. 从U节点到V节点之间的路径经过根节点
B. 从U节点到V节点之间的路径不经过根节点,这种情况下,U,V节点必定在根节点的左子树或者右子树上,这样就转化为求以根节点的孩子节点为根节点的二叉树中最远的两个节点间的距离
求二叉树的最大深度。
分析可知:对于二叉树,若要两个节点U,V相距最远,有两种情况:
A. 从U节点到V节点之间的路径经过根节点
B. 从U节点到V节点之间的路径不经过根节点,这种情况下,U,V节点必定在根节点的左子树或者右子树上,这样就转化为求以根节点的孩子节点为根节点的二叉树中最远的两个节点间的距离
typedef struct Node { struct Node *pleft; //左孩子 struct Node *pright; //右孩子 char chValue; //该节点的值 int leftMaxValue; //左子树最长距离 int rightMaxValue; //右子树最长距离 }LNode, *BinTree; void findMaxLen(BinTree root, int *maxLen) { //遍历到叶子结点,返回 if(root == NULL) return; //如果左子树为空,那么该节点左边最长距离为0 if(root->pleft == NULL) root->leftMaxValue = 0; //如果右子树为空,那么该节点右边最长距离为0 if(root->pright == NULL) root->rightMaxValue = 0; //如果左子树不为空,递归寻找左子树最长距离 if(root->pleft != NULL) findMaxLen(root->pleft, maxLen); //如果右子树不为空,递归寻找右子树最长距离 if(root->pright != NULL) findMaxLen(root->pright, maxLen); //计算左子树中距离根节点的最长距离 if(root->pleft != NULL) { if(root->pleft->leftMaxValue > root->pleft->rightMaxValue) root->leftMaxValue = root->pleft->leftMaxValue + 1; else root->leftMaxValue = root->pleft->rightMaxValue + 1; } //计算右子树中距离根节点的最长距离 if(root->pright != NULL) { if(root->pright->leftMaxValue > root->pright->rightMaxValue) root->rightMaxValue = root->pright->leftMaxValue + 1; else root->rightMaxValue = root->pright->rightMaxValue + 1; } //更新最长距离 if(root->leftMaxValue + root->rightMaxValue > *maxLen) *maxLen = root->leftMaxValue + root->rightMaxValue; }
求二叉树的最大深度。
int maxdeep(BinTree root){ if(root){ int left = maxdeep(root->left); int right = maxdeep(root->right); return left>right?left+1:right+1; }else{ return 0; } }
相关文章推荐
- Java数据结构-线性表之链表应用-检测链表是否有环
- 南阳oj NYoj 数据结构 士兵杀敌(一) 题目108
- Java数据结构-线性表之单链表应用-单链表合并
- Java数据结构-线性表之单链表应用-重复节点的删除
- Java数据结构-线性表之单链表应用-单链表的逆置
- Java数据结构-线性表之静态链表
- Java数据结构-线性表之循环链表
- Java数据结构-线性表之双向链表
- 数据结构之还没有解决的任务
- 数据结构之线索二叉树
- 数据结构之二叉树(遍历、建立、深度)
- 数据结构之二叉树(概念)
- 数据结构之循环队列
- 数据结构之链队列
- 数据结构之栈
- 数据结构之线性结构的离散存储(循环列表和双向链表)
- 数据结构之线性结构的离散存储(单链表)
- 数据结构之线性结构的顺序存储(数组)
- 数据结构概述
- 数据结构—二叉树的四种遍历