三种遍历

1、先序遍历

void preorder(node* root) {
    if (root == NULL) {
        return;
    }
    printf("%d", root->data);
    preorder(root->lchild);
    preorder(root->rchild);
}

2、中序遍历

//中序遍历
void inorder(node* root) {
    if (root == NULL) {
        return;
    }
    inorder(root->lchild);
    printf("%d", root->data);

    inorder(root->rchild);
}

3、后序遍历

//后序遍历
void postorder(node* root) {
    if (root == NULL) {
        return;
    }
    postorder(root->lchild);
    

    postorder(root->rchild);
    printf("%d", root->data);
}

4、层序遍历
1、用BFS模板来记忆真的挺好的
2、注意队列用的node*,这样就很好了!

//层序遍历
void leverorder(node* root) {
queue<node*> q;
q.push(root);
while (!q.empty()) {
node temp = q.front();
q.pop();
printf("%d", temp->data);
if (temp->lchild != NULL) {
q.push(temp->lchild);
}
if (temp->rchild != = NULL) {
q.push(temp->right);
}
}
}


5、求节点层数

//
计算每个节点所在的层次
struct node {
int data; //数据域
int layer; //层次
node* lchild; //左孩子
node* rchild; //右孩子
};

//需要在根节点入队前就先令根节点层次为1,来表示根节点是第一层
//之后now->lchild,now->rchild入队前,把它们的层号+1

void layerorder(node* root) {
queue<node> q;
root->layer = 1;
q.push(root);
while (!q.empty()) {
node
now = q.front();
q.pop();
printf("%d", root->layer);
if (root->lchild != NULL) {
now->lchild->layer = now->layer + 1;
q.push(now->lchild);
}
if (root->rchild != NULl) {
now->rchild->layer = now->layer + 1;
q.push(now->rchild);
}
}
}


6、知道先、中序列,合成一棵树

node* create(int preL, int preR, int inL, int inR) {
if (preL < preR) {
return NULL; //先序序列长度小于等于0,直接返回
}

node* root = new node;  //新建新的一个节点,用来存放当前二叉树的根节点
root->data = pre[preL]; //新节点的数据域为根节点的值
int k;

for (int k = inL;k <= inR; k++) {
    if (in[k] == pre[preL]) {   //在中序序列找到in[k] == pre[L]的结点
        break;
    }
}

int numLeft = k - inL;  //左子树的结点个数

//左子树的先序区间为[preL+1,preL+numLeft],中序区间为[inL,k-1]
//返回左子树的根节点地址,复制给root的左指针
root->lchild = create(preL + 1, preL + numLeft, intL, k - 1);

//右子树的先序区间为[preL + numLeft + 1,preR],中序为[k+1,inR]   //看出来了吗,只有中序才用了k
root->rchild = create(pre + numleft + 1, preR, k + 1, inR);

return root; //返回根节点地址

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容