求二叉树中节点的最大距离
2018-03-13 16:30
295 查看
编程之美中的一道题
编程之美中採用的解法是一种侵入式的
解法例如以下
我在解决问题时。想到的还有一个算法,推断一棵树是否是平衡二叉树,以下是我的解决方法,使用的php语言
编程之美中採用的解法是一种侵入式的
解法例如以下
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 nTempMax = 0; if(pRoot -> pLeft -> nMaxLeft > pRoot -> pLeft -> nMaxRight) { nTempMax = pRoot -> pLeft -> nMaxLeft; } else { nTempMax = pRoot -> pLeft -> nMaxRight; } pRoot -> nMaxLeft = nTempMax + 1; } // 计算右子树最长节点距离 if(pRoot -> pRight != NULL) { int nTempMax = 0; if(pRoot -> pRight -> nMaxLeft > pRoot -> pRight -> nMaxRight) { nTempMax = pRoot -> pRight -> nMaxLeft; } else { nTempMax = pRoot -> pRight -> nMaxRight; } pRoot -> nMaxRight = nTempMax + 1; } // 更新最长距离 if(pRoot -> nMaxLeft + pRoot -> nMaxRight > nMaxLen) { nMaxLen = pRoot -> nMaxLeft + pRoot -> nMaxRight; } }
我在解决问题时。想到的还有一个算法,推断一棵树是否是平衡二叉树,以下是我的解决方法,使用的php语言
public function getMaxDistance($node,&$Max){ if(null == $node){ return 0; } $left = $this->getMaxDistance($node->lchild,$Max); $right = $this->getMaxDistance($node->rchild,$Max); if($Max < ($left+$right)){ $Max = $left + $right; } return 1+($left>$right? $left:$right); }
相关文章推荐
- 编程之美 -求二叉树中节点的最大距离
- 利用栈结构实现二叉树的非递归遍历,求二叉树深度、叶子节点数、两个结点的最近公共祖先及二叉树结点的最大距离
- 编程之美3.8 求二叉树中节点的最大距离
- [编程之美] PSet3.8 求二叉树中节点的最大距离
- 二叉树系列——二叉树的最大距离(即相距最远的两个叶子节点,编程之美,百度面试题)
- 求二叉树节点的最大距离
- 【微软100题】求二叉树中节点的最大距离
- 二叉树中节点的最大距离
- 编程之美: 求二叉树中节点的最大距离
- 二叉树中节点的最大距离(树的最长路径)——递归解法
- 求二叉树中节点的最大距离
- 微软100题第11题(求二叉树中节点的最大距离)
- 【算法题目】求二叉树中节点的最大距离
- 二叉树中节点的最大距离
- 求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,
- 求二叉树中节点的最大距离 的另一个解法
- 编程之美读书笔记_3.8 求二叉树中节点的最大距离
- 求二叉树中节点的最大距离
- 编程之美 求二叉树中节点的最大距离 非递归
- 微软面试100题之11题:求二叉树中节点的最大距离