算法导论 练习题 10.4-5
2017-04-27 22:39
330 查看
typedef struct Tree { int key; Tree *p; Tree *left; Tree *right; }TN,*TNP; void trav(TNP root) { TNP t =root; while(t) { //向下走的过程,优先左子树 if(t->left) { t=t->left; } //同样是向下走的过程,该节点无左子树,就访问自身节点,继续找右子树 else if(t->right) { printf("%d ",t->key); t=t->right; } else { //叶子节点,访问自身之后开始向上走 printf("%d ",t->key); //一步一步向上走的过程其实也很长呀,需要迭代 while(1) { //这里有几种情况: if(t==t->p->left) { //1、该叶子是父节点的左孩子,父节点有右子树,那么访问完父节点,接下来应该访问父节点的右子树。 //这时需要跳出向上走的迭代过程,开始沿着右子树向下走 if(t->p->right) { printf("%d ",t->p->key); t=t->p->right; break; } //2、该叶子是父节点的左孩子,父节点没有右子树,那么访问完父节点,继续向上走 else { printf("%d ",t->p->key); t=t->p; } } //该节点是父节点的右孩子,因为右子树是访问完左子树和根之后访问的,所以不需要访问父节点,直接向上走 else { t=t->p; } //如果向上走到根节点,结束 if(t==root) return; } } } }
相关文章推荐
- 算法导论 练习题 10.4-4
- 算法导论 练习题 10.4-2
- 算法导论 练习题 10.4-3
- 算法导论 练习题 10.4-6
- 人人校园招聘笔试题 vs 算法导论练习题
- 《算法导论》练习题2.3-7
- 算法导论附录练习题
- 算法导论第三版 22.2 广度优先搜索 练习题答案全解析
- 算法导论 练习题 2.3-2
- 算法导论 练习题 3.2-2
- 算法导论 练习题 4.1-5
- 算法导论 练习题 4.2-3
- 算法导论 练习题 4.3-3
- 算法导论 练习题 4.4-2
- 算法导论 练习题 5.3-6
- 算法导论 练习题 6.1-1
- 算法导论 练习题 6.2-6
- 算法导论 练习题 9.1-1
- 算法导论 练习题 12.3-3
- 算法导论 练习题 13.1-2