求二叉树中相差最大的两个节点间的绝对值
来源:互联网 发布:windows游戏模拟器 编辑:程序博客网 时间:2024/05/02 10:55
题目:写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。
算法思想:通过遍历二叉树求得最大值和最小值。
源代码【完整】:
#include <iostream>
using namespace std;
//节点结构体
typedef struct Node
{
int value; //值
struct Node* left; //左儿子
struct Node* right; //右儿子
}treeNode;
//中序遍历
void displayTree(treeNode* node)
{
if(node == NULL)
return;
//先递归遍历左子树
if (node->left != NULL)
displayTree(node->left);
//打印节点值
cout << node->value << " ";
//递归遍历右子树
if (node->right != NULL)
displayTree(node->right);
}
//把node插入到root为根的树
void insertNode(treeNode* root, treeNode* node)
{
//被插入的节点值大于根节点,应该插入到右子树中
if(node->value >= root->value)
{
//如果root节点的右子树不为空,把node递归插入到右子树
if(root->right != NULL)
{
insertNode(root->right, node);
}
else
{
//如果root节点的右子树为空,那么node就是root的右儿子
root->right = node;
}
}
else
{
//如果root节点的左子树不为空,把node递归插入到左子树
if(root->left != NULL)
{
insertNode(root->left, node);
}
else
{
//如果root节点的左子树为空,那么node就是root的左儿子
root->left = node;
}
}
}
void insertValue(treeNode* root, int value)
{
treeNode* child = new treeNode();
child->value = value;
child->left = NULL;
child->right = NULL;
insertNode(root, child);
}
//使用数组中的数创建二叉排序树
void createTree(treeNode** root, int array[], int size)
{
*root = new treeNode();
//把数组的第一个元素作为根节点
(*root)->value = array[0];
(*root)->left = NULL;
(*root)->right = NULL;
//把每个元素作为节点插入到二叉树中形成二叉排序树
for(int i = 1; i < size; i++)
{
treeNode* child = new treeNode();
child->value = array[i];
child->left = NULL;
child->right = NULL;
insertNode(*root, child);
}
}
void findMaxDistance(treeNode* root, int &max, int &min)
{
if(root == NULL)
return;
treeNode* p = root;
max = (max > p->value) ? max : p->value;
min = (min < p->value) ? min : p->value;
if(p->left)
findMaxDistance(p->left, max, min);
if(p->right)
findMaxDistance(p->right, max, min);
}
int main()
{
int array[] = {250,50,8,100,12,141,18,-20,-30};
int size = sizeof(array) / sizeof(array[0]);
//创建二叉树
treeNode* root = NULL;
createTree(&root, array, size);
//遍历二叉树
cout << "Binary Tree, left-->middle-->right:" << endl;
displayTree(root);
cout << endl;
int max = root->value;
int min = root->value;
findMaxDistance(root, max, min);
cout << "The max distance is: " << max - min << endl;
system("Pause");
return 0;
}
- 笔试:求二叉树中相差最大的两个节点间的差值绝对值
- 求二叉树中相差最大的两个节点间的绝对值
- [阿里2015校招笔试]求二叉树中相差最大的两个节点间的差值绝对值
- 二叉树中相差最大的两个节点间的差的绝对值(层次遍历+递归先序)
- 写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。
- [阿里巴巴2015校园招聘]写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。 .
- 写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。
- 写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。
- 写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。
- 阿里 2014校招机试题 求存放整数的二叉树相差最大的两节点之差绝对值
- 算法题-写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵树中相差最大的两个节点间的差的绝对值。请注意程序效率。
- 求整型二叉树节点差值的最大绝对值
- 求二叉树中两个节点的最大距离
- 算法:求二叉树中两个节点的最大距离
- ALBB 二叉树中相差最大节点的绝对差值
- 求一个二叉树中任意两个节点间的最大距离
- 【每日面试题】求一个二叉树中任意两个节点间的最大距离
- 求一个二叉树中任意两个节点间的最大距离
- 2219. A famous math puzzle
- SQL合并统一数据(相同的在一行显示)
- Visual SVN Server启动失败0x8007042a错误
- printk && demsg
- 勿入陷阱 从业者告诉你真实的P2P第三方支付托管
- 求二叉树中相差最大的两个节点间的绝对值
- oracle Lpad()函数和Rpad()函数的用法
- 7款开源Java反编译工具
- 怎么才能快速获得积分?
- 解决kindeditor上传图片、文件的错误。
- 嵌入式Linux 建立udev 及有意思的udev FAQ
- cocos2dx中CCLabelTTF多行文本显示崩溃问题
- 和利时《项目经理、项目管理及核心能力建设》讲座圆满结束!
- UIWebView加载本地HTML5文件