本文共 1195 字,大约阅读时间需要 3 分钟。
标签:二叉树
/* 题意:打印二叉树根节点到某一结点的路径。 建树,题目会给一串数字,以第一个数字为根节点。余下的值若比父节点大,值在父节点的W;反之,则在E。*/#include#include #include #include using namespace std;vector ans;struct Node{ //建立结点,用结构体加指针,v表示结点的值 int v; Node *left, *right; //左右子树 Node(): left(NULL), right(NULL) {} //创建新结点} tree;Node* root;Node *newnode(){ return new Node(); //申请新结点}Node* Create(Node *rt, int v){ //建树,传入根结点和需要建立的值 if(rt == NULL){ //根结点为空,将值赋给根结点 rt = newnode(); rt->v = v; rt->left = rt->right = NULL; return rt; } if(rt->v > v) rt->right = Create(rt->right, v); //输入值 <父节点,递归建立右子树 else rt-> left = Create(rt->left,v); //输入值>父节点,递归建立左子树 return rt;}void get_path(Node *root, int x){ if(root->v == x){ puts(""); return ; } else if(root->v > x){ putchar('E'); get_path(root->right, x); } else{ putchar('W'); get_path(root->left, x); }}int main(){ int T, n, q; scanf("%d", &T); while(T--){ scanf("%d", &n); root = NULL; int v; for(int i = 0; i < n; i++){ scanf("%d", &v); root = Create(root, v); //边输入边建树 } scanf("%d", &q); for(int i = 0; i < q; i++){ int d; scanf("%d", &d); get_path(root, d); } } return 0;} 父节点,递归建立右子树>
转载地址:http://nikxi.baihongyu.com/