zoukankan      html  css  js  c++  java
  • 完全二叉树的建立和翻转

    建立一个深度为n的完全二叉树,并翻转值为m的子树,输出最后层序输出二叉树的所有节点

    节点的值从1开始递增

    输入:

    4  3

    输出

    1

    3

    4

    5

    7

    6

    8

    9

    10

    11

    14

    15

    12

    13

    #include<iostream>
    #include<queue>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    int a[100005];
    typedef struct node{
        int val;
        node* left;
        node* right;
    }Treenode;
    Treenode* creat(int n,int m)
    {
       //先创建一棵空树 Treenode
    * root=(Treenode*)malloc(sizeof(Treenode)*(n+1)); for(int i=1;i<=n;i++){ root[i].val=a[i]; root[i].left=NULL; root[i].right=NULL; }
      //给树赋值
    for(int i=1;i<=n/2;i++){ if(i*2<=n) root[i].left=&root[2*i]; if(i*2+1<=n) root[i].right=&root[2*i+1]; }
      //翻转子树
    for(int i=1;i<=n/2;i++){ if(root[i].val==m){ if(i*2<=n) root[i].left=&root[2*i+1]; if(i*2+1<=n) root[i].right=&root[2*i]; break; } } return &root[1]; }
    //层序输出
    void Print(node* &root) { queue<node*>q; q.push(root); while(!q.empty()){ printf("%d ",q.front()->val); if(q.front()->left) q.push(q.front()->left); if(q.front()->right) q.push(q.front()->right); q.pop(); } printf(" "); } int main() { int n,k,x,t=1; cin>>n>>k; for(int i=1;i<=n;i++){ for(int j=0;j<pow(2,i-1);j++) { a[t]=t; t++; } } Treenode* root=NULL; root=creat(t-1,k); Print(root); return 0; }
  • 相关阅读:
    2021/9/23(桶排序+基数排序 结束排序)
    【转】十大经典排序算法(动画演示)
    如何测试代码执行时间
    图解排序算法之归并排序(转)
    TED演讲:拖延症人群的内心世界
    IntelliJ IDEA入门
    支付宝支付入门
    Spring Cloud 入门
    软件设计模式类型介绍
    《小狗钱钱2》读书笔记
  • 原文地址:https://www.cnblogs.com/-citywall123/p/13419492.html
Copyright © 2011-2022 走看看