首页 > 编程语言 >生成一个满二叉数算法

生成一个满二叉数算法

时间:2024-01-28 16:57:21浏览次数:18  
标签:right TreeNode parent val 生成 算法 二叉 public left

1、树结构类

public class TreeNode<T> {

     T val;

     TreeNode<T> parent;

     TreeNode<T> right;

     TreeNode<T> left;

    public TreeNode(){

    }
    public TreeNode(T val){
        this.val = val;
        this.parent = null;
        this.right = null;
        this.left = null;
    }


    public TreeNode(T val, TreeNode<T> parent, TreeNode<T> right, TreeNode<T> left) {
        this.val = val;
        this.parent = parent;
        this.right = right;
        this.left = left;
    }

    public T getVal() {
        return val;
    }

    public void setVal(T val) {
        this.val = val;
    }

    public TreeNode<T> getParent() {
        return parent;
    }

    public void setParent(TreeNode<T> parent) {
        this.parent = parent;
    }

    public TreeNode<T> getRight() {
        return right;
    }

    public void setRight(TreeNode<T> right) {
        this.right = right;
    }

    public TreeNode<T> getLeft() {
        return left;
    }

    public void setLeft(TreeNode<T> left) {
        this.left = left;
    }
}

二、获取满二叉数的算法

public class Struggle {

    public static void main(String[] args) {
        /**创建满二叉树的层级数*/
        int total = 6;
        /** 获取难二叉数*/
        TreeNode tree = getTree(total);
    }
    /** 创建根节点*/
    public static TreeNode getTree(int total) {
        /** 如果获取的层级数小于0,直接返回null*/
        if (total <= 0) {
            return null;
        }
        /** 创建根节点 */
        TreeNode root = new TreeNode(1);
        /** 维护剩余节点*/
        getTreeNode(root, 1, total);
        return root;
    }

    /**
     * 递归获取满二叉数
     * @param parent 根节点
     * @param count 当前层数
     * @param total 总层数
     */
    public static void getTreeNode(TreeNode parent, int count, int total) {
        /** 当前层与创建的层一致,直接返回*/
        if (count == total) {
            return;
        }
        /** 维护左右节点*/
        parent.setLeft( new TreeNode(1, parent,null, null));
        parent.setRight( new TreeNode(1, parent,null, null));
        /**当前层递增*/
        count++;
        /** 维护左右节点的左右节点*/
        getTreeNode(parent.getLeft(), count, total);
        getTreeNode(parent.getRight(), count, total);
    }

}

标签:right,TreeNode,parent,val,生成,算法,二叉,public,left
From: https://www.cnblogs.com/Small-sunshine/p/17992995

相关文章

  • 一些在刷js算法时常用的方法(1)
    Array.fromArray.from()静态方法从可迭代或类数组对象创建一个新的浅拷贝的数组实例String、Array、TypedArray、Map、Set以及Intl.Segments(en-US)都是内置的可迭代对象console.log(Array.from('foo'));//输出:Array["f","","o","o"]可以将字符串拆成数组,同时将......
  • 【学习笔记】部分树上算法(概念篇)
    本文包括:轻重链剖分(done)线段树合并(done)tobeupd:长链剖分DSUontree(树上启发式合并)点分治边分治LCT有待更新本文非例题代码大多未经过编译,谨慎使用本文本来只有重剖长剖dsu,但是发现不会写,另外几个甚至更简单就带歪了.jpgpart1轻重链剖分树剖是一类算法的总......
  • 单源最短路径算法之bellman-ford
    单源最短路径算法之\(bellman-ford\)以边为研究对象单起点多终允许有负边权\(bellman-ford\)的工作原理假设\(n\)个点\(m\)条有向边的图,求\(s\)为起点的最短路条以\(s\)出发的最短路,最多包含\(n\)个点,\(n-1\)条边对于一条边\((x,y,w)\),\(y\)可能被\(x\)......
  • leetcode--98. 验证二叉搜索树(bfs)
    记录13:502024-1-28https://leetcode.cn/problems/validate-binary-search-tree/想岔方向了,想的太复杂了。首先思路是每个root节点必须大于左子树的最大节点,小于右边子树的最小节点。我的做法是记录下叶子节点,因为左边叶子节点的集合(vector)的最后一个节点为左子树的最大值......
  • 算法模板 v1.4.1.20240128
    算法模板v1.1.1.20240115:之前的历史版本已经不可寻,创建了第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”与“编译”-“手动开O优化”;将“编译”-“CF模板”中的第20行代码cin>>T;注释;删除“读写”及其目录下的内容;删除“图论”-“欧拉图”-“混合图”;删除“图论”-......
  • 二叉搜索树
    7-2这是二叉搜索树吗?分数25全屏浏览题目切换布局作者 陈越单位 浙江大学一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,其左子树中所有结点的键值小于该结点的键值;其右子树中所有结点的键值大于等于该结点的键值;其左右子......
  • 贪心算法之两端贪
    这类题目一般是当前元素的位置既受前一个元素的影响又受后一个元素的影响。题目一定是要确定一边之后,再确定另一边,例如比较每一个元素的左边,然后再比较右边,如果两边一起考虑一定会顾此失彼。当确定一边后,就单独看排完序的数组,因为这时候只需考虑一边,因此容易找规律。典型题目:1......
  • 文心一言 VS 讯飞星火 VS chatgpt (188)-- 算法导论14.1 5题
    五、用go语言,给定n个元素的顺序统计树中的一个元素x和一个自然数i,如何在O(lgn)的时间内确定工在该树线性序中的第i个后继?文心一言,代码正常运行:在顺序统计树(也称为平衡二叉搜索树)中,要找到一个元素x的第i个后继,我们可以使用以下步骤:从根节点开始,使用递归或迭代方式沿......
  • day25 代码随想录算法训练营 17. 电话号码的字母组合
    题目:17.电话号码的字母组合我的感悟:一时间没理解没关系,只要不放弃,就会成长!!!理解难点:index是独立集合的起点,需要理解它。有些东西就是时间的积累代码难点:代码示例:classSolution:def__init__(self):self.letterMap=["",#0......
  • 代码随想录算法训练营第四天| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节
    24.两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。题目链接:24.两两交换链表中的节点-力扣(LeetCode)建议画图,会更清晰一些。同时注意交换问题要用两个临时节点。class......