编程之美 -求二叉树中节点的最大距离
2013-03-20 23:44
381 查看
struct Node { Node* pLeft; //左子树 Node* pRight; //右子树 int nMaxLeft; //左子树中的最长距离 int nMaxRight; //右子树中的最长距离 char chValue; //该节点的值 }; int nMaxLen = 0; //寻找树中最长的两段距离 void findMaxLen(Node* pRoot) { //遍历到叶子节点,则返回 if (pRoot == NULL) { return; } //如果左子树为空,那么该节点的左边最长距离为0 if (pRoot->pLeft == NULL) { pRoot->nMaxLeft = 0; } //如果右子树为空,那么该节点的右边最长距离为0 if (pRoot->pRight == NULL) { pRoot->nMaxRight = 0; } //如果左子树不为空,递归寻找左子树最长距离 if (pRoot->pLeft != NULL) { findMaxLen(pRoot->pLeft); } //如果右子树不为空,递归寻找右子树最长距离 if (pRoot->pRight != NULL) { findMaxLen(pRoot->pRight); } //计算左子树最长节点距离 if (pRoot->pLeft != NULL) { int nTemp; if (pRoot->pLeft->nMaxLeft > pRoot->pLeft->nMaxRight) { nTemp = pRoot->pLeft->nMaxLeft; } else nTemp = pRoot->pLeft->nMaxRight; pRoot->nMaxLeft = nTemp+1; } //计算右子树最长节点距离 if (pRoot->pRight != NULL) { int nTemp; if (pRoot->pRight->nMaxLeft > pRoot->pRight->nMaxRight) { nTemp = pRoot->pRight->nMaxLeft; } else nTemp = pRoot->pRight->nMaxRight; pRoot->nMaxRight = nTemp+1; } //更新最长距离 if (pRoot->nMaxLeft+pRoot->nMaxRight > nMaxLen) { nMaxLen = pRoot->nMaxLeft+pRoot->nMaxRight; } }
相关文章推荐
- 编程之美 求二叉树中节点的最大距离 非递归
- 编程之美 - 求二叉树节点的最大距离
- 编程之美--求二叉树节点最大距离
- 读书笔记之编程之美 - 3.8 求二叉树中节点的最大距离
- 编程之美3.8 求二叉树中节点的最大距离
- 二叉树系列——二叉树的最大距离(即相距最远的两个叶子节点,编程之美,百度面试题)
- 编程之美--求二叉树中节点的最大距离
- [编程之美] PSet3.8 求二叉树中节点的最大距离
- [编程之美-14]求二叉树中节点的最大距离
- 编程之美。求二叉树节点最大距离
- 【编程题目】求二叉树中节点的最大距离
- 编程之美------3.8 求二叉树中节点的最大距离
- 编程之美3.8: 求二叉树中节点的最大距离
- 编程之美 3.8 求二叉树中节点的最大距离 3.9 重建二叉树
- 编程之美--3.8 求二叉树中节点的最大距离
- 编程之美-求二叉树中节点的最大距离方法整理
- 编程之美3.8 求二叉树中节点的最大距离
- 编程之美之求二叉树中节点的最大距离(递归和非递归法)
- 编程之美3.8 求二叉树中节点的最大距离
- 编程之美: 求二叉树中节点的最大距离