代码自己想的,23年8月21没有仔细看王道书上的代码和自己写的有什么区别,测试应该是对的。
但是如果k的值大于结点个数没有做判断
#include <stdio.h> #include <stdlib.h> typedef struct TNode{ int data; struct TNode *lchild,*rchild; }TreeNode,*Tree; void CreateTree(Tree &T) { int x; scanf("%d",&x); if(x==-1) { T=NULL; return; } else { T=(Tree)malloc(sizeof(TreeNode)); T->data=x; printf("输入%d的左子节点:",x); CreateTree(T->lchild); printf("输入%d的右子节点:",x); CreateTree((T->rchild)); } } //先序遍历二叉树(递归实现) int PreOrderTree(Tree T,int k) { static int count=0; if (T==NULL) { return -1; } else { if(++count==k) { printf("第3个元素的值为%d",T->data); return 0; } PreOrderTree(T->lchild,k); PreOrderTree(T->rchild,k); } } //中序遍历二叉树(递归实现) int MidOrderTree(Tree T,int k) { static int count=0; if(T==NULL) { return -1; } else { MidOrderTree(T->lchild,k); if(++count==k) { printf("第3个结点值为%d",T->data); return 0; } MidOrderTree(T->rchild,k); } } //后序遍历二叉树(递归实现) int LatOrderTree(Tree T,int k) { static int count=0; if(T==NULL) { return -1; } else { LatOrderTree(T->lchild,k); LatOrderTree(T->rchild,k); if(++count==k) { printf("第6个结点值为%d",T->data); return 0; } } } int main() { Tree T; CreateTree(T); PreOrderTree(T,3); MidOrderTree(T,5); LatOrderTree(T,6); return 0; }
标签:count,结点,return,求先序,int,中序,Tree,printf,data From: https://www.cnblogs.com/simpleset/p/17645138.html