完全二叉树代码复习用

package algorithom;

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
/**
 * 定义二叉树节点元素
 * @author bubble
 *
 */
class Node {
    public Node leftchild;
    public Node rightchild;
    public int data;
    public Node(int data) {
        this.data = data;
    }
}
public class TestBinTree {
    /**
     * 将一个arry数组构建成一个完全二叉树
     * @param arr 需要构建的数组
     * @return 二叉树的根节点
     */
    public Node initBinTree(int[] arr) {
        /*数组的长度为1时返回值为自己的节点*/
        if(arr.length == 1) {
            return new Node(arr[0]);
        }
        /*数组长度不为一,则一个个加进去数组中,数组存储节点*/
        List<Node> nodeList = new ArrayList<>();
        for(int i = 0; i < arr.length; i++) {
            nodeList.add(new Node(arr[i]));
        }
        /*实现关系的依赖,因为这里是完全二叉树,所以可以用下标的方式来保证关系*/
        int temp = 0;
        /*temp可以用来定义左右孩子的位置*/
        while(temp <= (arr.length - 2) / 2) { //注意这里,数组的下标是从零开始的
            if(2 * temp + 1 < arr.length)
                /*自己节点的左孩子是多少*/
                nodeList.get(temp).leftchild = nodeList.get(2 * temp + 1);
            if(2 * temp + 2 < arr.length)
                /*自己节点的右孩子是多少*/
                nodeList.get(temp).rightchild = nodeList.get(2 * temp + 2);
                /*每次左右孩子赋值后自增操作*/
            temp++;
        }
        /*最后返回第一个节点,因为已经关联上了*/
        return nodeList.get(0);
    }
    /**
     * 层序遍历二叉树
     * @param root 二叉树根节点
     * @param nodeQueue ,用到的队列数据结构
     */
    public void trivalBinTree(Node root, Queue<Node> nodeQueue) {
        nodeQueue.add(root);
        Node temp = null;
        while ((temp = nodeQueue.poll()) != null) {
            System.out.print(temp.data + " ");
            if (temp.leftchild != null) {
                nodeQueue.add(temp.leftchild);
            }
            if (temp.rightchild != null) {
                nodeQueue.add(temp.rightchild);
            }
        }
    }
    /**
     * 先序遍历
     * @param root 二叉树根节点
     */
    public void preTrival(Node root) {
        if(root == null) {
            return;
        }
        System.out.print(root.data + " ");
        preTrival(root.leftchild);
        preTrival(root.rightchild);
    }
    /**
     * 中序遍历
     * @param root 二叉树根节点
     */
    public void midTrival(Node root) {
        if(root == null) {
            return;
        }
        midTrival(root.leftchild);
        System.out.print(root.data + " ");
        midTrival(root.rightchild);
    }
    /**
     * 后序遍历
     * @param root 二叉树根节点
     */
    public void afterTrival(Node root) {
        if(root == null) {
            return;
        }
        afterTrival(root.leftchild);
        afterTrival(root.rightchild);
        System.out.print(root.data + " ");
    }
    public static void main(String[] args) {
        TestBinTree btree = new TestBinTree();
        int[] arr = new int[] {1,2,3,4,5,6,7};
        Node root = btree.initBinTree(arr);
        Queue<Node> nodeQueue = new ArrayDeque<>();
        System.out.println("测试结果:");
        System.out.println("层序遍历:");
        btree.trivalBinTree(root, nodeQueue);
        System.out.println("\n先序遍历:");
        btree.preTrival(root);
        System.out.println("\n中序遍历:");
        btree.midTrival(root);
        System.out.println("\n后序遍历:");
        btree.afterTrival(root);
    }
}
全部评论

相关推荐

AI牛可乐:哇,听起来你遇到了什么挑战呢!🐮牛可乐在这里,虽然小,但是勇敢又聪明,想听听你的具体情况哦!如果你愿意的话,可以点击我的头像给我私信,我们可以一起想办法应对挑战,好不好呀?🌟🎉
点赞 评论 收藏
分享
一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
评论
点赞
收藏
分享
正在热议
# 25届秋招总结 #
440428次浏览 4493人参与
# 春招别灰心,我们一人来一句鼓励 #
41455次浏览 524人参与
# 北方华创开奖 #
107283次浏览 599人参与
# 地方国企笔面经互助 #
7922次浏览 18人参与
# 虾皮求职进展汇总 #
113889次浏览 883人参与
# 实习,投递多份简历没人回复怎么办 #
2453837次浏览 34847人参与
# 阿里云管培生offer #
119756次浏览 2219人参与
# 实习必须要去大厂吗? #
55644次浏览 960人参与
# 同bg的你秋招战况如何? #
75364次浏览 551人参与
# 提前批简历挂麻了怎么办 #
149798次浏览 1977人参与
# 投递实习岗位前的准备 #
1195668次浏览 18546人参与
# 你投递的公司有几家约面了? #
33170次浏览 188人参与
# 双非本科求职如何逆袭 #
661833次浏览 7394人参与
# 机械人春招想让哪家公司来捞你? #
157595次浏览 2267人参与
# 如果公司给你放一天假,你会怎么度过? #
4719次浏览 54人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11300次浏览 267人参与
# 发工资后,你做的第一件事是什么 #
12384次浏览 61人参与
# 工作中,努力重要还是选择重要? #
35576次浏览 384人参与
# 参加完秋招的机械人,还参加春招吗? #
20079次浏览 240人参与
# 实习想申请秋招offer,能不能argue薪资 #
39220次浏览 314人参与
# 我的上岸简历长这样 #
451897次浏览 8088人参与
# 非技术岗是怎么找实习的 #
155837次浏览 2120人参与
牛客网
牛客企业服务