zoukankan      html  css  js  c++  java
  • 面试中的二叉树题目

    题目列表:

    1. 求二叉树中的节点个数

      DFS遍历时记录点的个数
    2. 求二叉树的深度

      DFS遍历时记录点的最大
    3. 前序遍历,中序遍历,后序遍历

      三种DFS

    4.分层遍历二叉树(按层次从上往下,从左往右)

      BFS
    5. 将二叉查找树变为有序的双向链表

      先建树,在中序遍历即可

    //1
    //4 2 1 0 0 3 0 0 6 5 0 0 7 0 0
    
    #include<stdio.h>
    
    struct Tree{
        int v;
        Tree *left,*right;
    }*rhead;
    
    void build(Tree *head){
        int temp;
        scanf("%d",&temp);
        if(temp==0){
            head->v=0;
            head->left=NULL;
            head->right=NULL;
        }else{
            head->v=temp;
            head->left=new Tree;
            build(head->left);
            head->right=new Tree;
            build(head->right);
        }
    }
    
    int step;
    int road[100999];
    void First(Tree *head){
        
        if(head->v==0)return ;
        First(head->left);
        step++;
        road[step]=head->v;
        First(head->right);
    }
    
    int main(){
        int n;
        scanf("%d",&n);
        while(n--){
            rhead=new Tree;
            build(rhead);
            step=0;
            First(rhead);
            int i,ok=0;
            for(i=1;i<=step;i++){
                if(ok==0)ok=1;
                else printf(" ");
                printf("%d",road[i]);
            }printf("
    ");
        }
    
        return 0;
    }
    View Code

    6. 求二叉树第K层的节点个数

      DFS记录 step==K 时有几个结点
    7. 求二叉树中叶子节点的个数

      DFS记录没有儿子的结点有几个
    8. 判断两棵二叉树是否结构相同

      同时DFS遍历两棵树观察是否相同
    9. 判断二叉树是不是平衡二叉树

      平衡二叉树的定义是左右子树的高度差不超过1,DFS遍历判断左右子树高度是否都相差1
    10. 求二叉树的镜像

      同时遍历两棵树,一颗遍历左子树的时候副本遍历右子树依次复制结点信息,反之亦然。
    11. 求二叉树中两个节点的最低公共祖先节点

      先判断两个点是否在树中,若不是则直接就找不到

      若在树中,则DFS搜索连个点所在的路径,搜到了两个路径,在找两个路径最开始的相同点,也就是最近祖先结点

    12. 求二叉树中节点的最大距离

    统计所有左右子树的高度+2的最大值即可

    int max=0;
    void DFS(Tree *head){
        if(head==NULL)return 0;
        int add=2+DFS(head->left)+DFS(head->right);
        if(max<add) max=add;              
    }

    13. 由前序遍历序列和中序遍历序列重建二叉树

      http://www.cnblogs.com/huhuuu/p/3347700.html 类似

      就是不断将前序中的一个个结点代到中序遍历的树中,逐渐生成一棵树
    14.判断二叉树是不是完全二叉树

       不用指针表示,用数字下标表示树所在的位置,树高K,统计i:1~(k-1)层对应的结点个数是否是 2^(i-1)如果是,再对下标为2^(k-2) ~2^(k-1)-1 所在的树统计儿子的结点个数是否依次是 2 2 ……2 0……0 或是 2 2…… 2 1 0……0的的形式,若是则为完全二叉树

    需要比较详细的答案可以参考:http://blog.csdn.net/luckyxiaoqiang/article/details/7518888

  • 相关阅读:
    前后端分离的思想
    原生js瀑布流
    瀑布流懒加载
    js的垃圾回收机制
    TCP三次挥手四次握手
    HTTP与HTTPS的区别
    http报文
    前后端的分离
    express中间件
    vue生命周期钩子函数解读步骤
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3391323.html
Copyright © 2011-2022 走看看