算法导论 练习题 10.4-5

来源:互联网 发布:大数据与市场调研 编辑:程序博客网 时间:2024/05/13 20:11
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;}}}}

0 0
原创粉丝点击