设为首页 加入收藏

TOP

一步一步写算法(之排序二叉树) (二)
2014-11-23 23:36:33 来源: 作者: 【 】 浏览:7
Tags:步一步 算法 排序

printf("%d\n", pTreeNode->data);

print_all_node_data(pTreeNode->right_child);

}

}

void print_all_node_data(const TREE_NODE* pTreeNode)

{

if(pTreeNode){

print_all_node_data(pTreeNode->left_child);

printf("%d\n", pTreeNode->data);

print_all_node_data(pTreeNode->right_child);

}

} 分析:因为二叉树本身的特殊性,按顺序打印二叉树的函数本身也比较简单。首先打印左子树的节点,然后打印本节点的数值,最后打印右子树节点的数值,这样所有节点的数值就都可以打印出来了。

5)统计树的高度

int calculate_height_of_tree(const TREE_NODE* pTreeNode)

{

int left, right;

if(NULL == pTreeNode)

return 0;

left = calculate_height_of_tree(pTreeNode->left_child);

right = calculate_height_of_tree(pTreeNode->right_child);

return (left > right) (left + 1) : (right + 1);

}

int calculate_height_of_tree(const TREE_NODE* pTreeNode)

{

int left, right;

if(NULL == pTreeNode)

return 0;

left = calculate_height_of_tree(pTreeNode->left_child);

right = calculate_height_of_tree(pTreeNode->right_child);

return (left > right) (left + 1) : (right + 1);

} 分析:树的高度其实是指所有叶子节点中,从根节点到叶子节点的最大高度可以达到多少。当然,程序中表示得已经很明白了,如果节点为空,那么很遗憾,节点的高度为0;反之如果左子树的高度大于右子树的高度,那么整个二叉树的节点高度就是左子树的高度加上1;如果右子树的高度大于左子树的高度,那么整个二叉树的高度就是右子树的高度加上1。计算树的高度在我们设计平衡二叉树的时候非常有用,特别是测试的时候,希望大家多多理解,熟练掌握。

总结:

1)二叉树是所有树的基础,后续的平衡二叉树、线性二叉树、红黑树、复合二叉树、b树、b+树都以此为基础,希望大家好好学习;

2)二叉树很多的操作是和堆栈紧密联系在一起的,如果大家暂时理解不了递归,可以用循环或者堆栈代替;

3)实践出真知,大家可以自己对排序二叉树的代码多多练习。不瞒大家说,我个人写平衡二叉树不下20多遍,即使这样也不能保证每次都正确;即使这样,我每次写代码的都有不同的感觉。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇一步一步写算法(之排序二叉树删.. 下一篇一步一步写算法(之排序二叉树删..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: