发布一个k8s部署视频:https://edu.csdn.net/course/detail/26967
课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。
腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518
第二个视频发布 https://edu.csdn.net/course/detail/27109
腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518
介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。
第三个视频发布:https://edu.csdn.net/course/detail/27574
详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————------------------------------------------------------------------------------------------------------------------
第11题(树)
求二叉树中节点的最大距离...
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,
我们姑且定义"距离"为两节点之间边的个数。
写一个程序,
求一棵二叉树中相距最远的两个节点之间的距离。
package com.microsoft;
import java.util.Random;
public class MaxDistance {
private Node root;
private Node lineRoot;
public MaxDistance(int[] data) {
for (int i = 0; i < data.length; i++) {
Node node = new Node();
node.value = data[i];
node.weight = 0;
if (root == null) {
root = node;
} else {
insertNode(root, node);
}
}
}
private void computeRoot(){
int maxWeight=0;
if(root.left!=null&&root.right!=null){
maxWeight=root.left.weight+root.right.weight+1;
}else if(root.left!=null){
maxWeight=root.left.weight+1;
}else if(root.right!=null){
maxWeight=root.right.weight+1;
}
lineRoot=root;
computeRoot(root,maxWeight);
}
private void computeRoot(Node node,int weight){
int maxWeight=0;
if(node.left!=null&&node.right!=null){
maxWeight=node.left.weight+node.right.weight+1;
}else if(node.left!=null){
maxWeight=node.left.weight+1;
}else if(node.right!=null){
maxWeight=node.right.weight+1;
}
if(maxWeight>weight){
weight=maxWeight;
lineRoot=node;
}
if(node.left!=null){
computeRoot(node.left,weight);
}
if(node.right!=null){
computeRoot(node.right,weight);
}
}
public void getDistance(){
computeRoot();
System.out.println(lineRoot.value);
lineRoot.corss=true;
if(lineRoot.left!=null&&lineRoot.right!=null){
lineRoot.left.corss=true;
lineRoot.right.corss=true;
markNode(lineRoot.left);
markNode(lineRoot.right);
}else if(lineRoot.left!=null){
lineRoot.left.corss=true;
markNode(lineRoot.left);
}else if(lineRoot.right!=null){
lineRoot.right.corss=true;
markNode(lineRoot.right);
}
printMaxDisLeftNode(lineRoot.left);
System.out.print(lineRoot.value+"=>");
printMaxDisRightNode(lineRoot.right);
System.out.println();
}
private void printMaxDisLeftNode(Node node){
if(node==null){
return;
}
if(node.left!=null&&node.left.corss){
printMaxDisLeftNode(node.left);
}else if(node.right!=null&&node.right.corss){
printMaxDisLeftNode(node.right);
}
System.out.print(node.value+"=>");
}
private void printMaxDisRightNode(Node node){
if(node==null){
return ;
}
System.out.print(node.value+"=>");
if(node.left!=null&&node.left.corss){
printMaxDisRightNode(node.left);
}else if(node.right!=null&&node.right.corss){
printMaxDisRightNode(node.right);
}
}
private void markNode(Node node){
if(node==null){
return ;
}
if(node.left!=null&&node.right!=null){
if(node.left.weight>node.right.weight){
node.left.corss=true;
markNode(node.left);
}else{
node.right.corss=true;
markNode(node.right);
}
}else if(node.left!=null){
node.left.corss=true;
markNode(node.left);
}else if(node.right!=null){
node.right.corss=true;
markNode(node.right);
}
}
private void insertNode(Node parent, Node node) {
int random = new Random().nextInt(2);
if (parent==root||random == 1) {
if (parent.left != null) {
insertNode(parent.left, node);
} else {
parent.left = node;
node.parent = parent;
Node n = node;
while (n != null) {
if (n.left != null && n.right != null) {
n.weight = Math.max(n.left.weight, n.right.weight) + 1;
} else if (n.left != null) {
n.weight = n.left.weight + 1;
} else if (n.right != null) {
n.weight = n.right.weight + 1;
}
n = n.parent;
}
}
} else {
if (parent.right != null) {
insertNode(parent.right, node);
} else {
parent.right = node;
node.parent = parent;
Node n = node;
while (n != null) {
if (n.left != null && n.right != null) {
n.weight = Math.max(n.left.weight, n.right.weight) + 1;
} else if (n.left != null) {
n.weight = n.left.weight + 1;
} else if (n.right != null) {
n.weight = n.right.weight + 1;
}
n = n.parent;
}
}
}
}
public void print() {
Node h = this.root;
this.print(0, h);
}
private void print(int level, Node node) {
if(node==null){
return;
}
for (int i = 0; i < level; i++) {
System.out.format(" ");
}
System.out.format("|");
for (int i = 0; i < level; i++) {
System.out.format("-");
}
System.out.format("%d%s%s%n", node.value, ","+ node.weight,node.corss?"M":"");
print(level + 1, node.left);
print(level+1,node.right);
}
private class Node {
private Node parent;
private Node left;
private Node right;
private int value;
private boolean corss;
private int weight;
}
public static void main(String[] args) {
int[] data = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20,21,22,23,24,25,26,27,28,29,30 };
MaxDistance tree = new MaxDistance(data);
tree.getDistance();
tree.print();
}
}