外贸建站选择哪个服务器好Wordpress吃内存怎么办
2026/5/18 21:52:33 网站建设 项目流程
外贸建站选择哪个服务器好,Wordpress吃内存怎么办,网站建设在国内外研究现状,分栏式的网站有哪些一、二叉排序树概述二叉排序树是一种特殊的二叉树#xff0c;满足左子树节点值小于根节点值#xff0c;右子树节点值大于根节点值。如图中所示二、二叉排序树的创建1.我们先定义一个节点的数据结构TreeNode#xff0c;一个节点包含左右孩子指针和数据项。public class TreeN…一、二叉排序树概述二叉排序树是一种特殊的二叉树满足左子树节点值小于根节点值右子树节点值大于根节点值。如图中所示二、二叉排序树的创建1.我们先定义一个节点的数据结构TreeNode一个节点包含左右孩子指针和数据项。public class TreeNode { public TreeNode lchild; public TreeNode rchild; public Integer data; public TreeNode(Integer data){ this.data data; } }2.我们需要一个指针root用来指向树的根节点还需要一个指针curNode来指向当前判断的节点除了判断新节点是否大于或小于curNode还需要判断curNode的左右孩子节点是不是空如果不是空我们需要循环把curNode指向其孩子节点继续判断直到curNode的孩子节点为空插入新节点。以下是代码流程新插入节点判断1如果root null新插入节点作为根节点不为null进行值的判断2循环判断新插入节点的值是否小于当前节点如果小往左走直到为null插入3循环判断新插入节点的值是否大于当前节点如果大往右走直到为null插入public class BinaryTree { public TreeNode root; public void create(Integer data){ TreeNode newNode new TreeNode(data); //选择一个节点作为根节点 if(root null){ root newNode; return; } TreeNode curNode root; while(true){ //新节点大于当前判断节点 if(curNode.data newNode.data){ //判断节点的右孩子节点是空的可以插入否则右孩子节点做下次判断节点 if(curNode.rchild null){ curNode.rchild newNode; return; } curNode curNode.rchild; }else { //判断节点的左孩子节点是空的可以插入否则左孩子节点做下次判断节点 if(curNode.lchild null){ curNode.lchild newNode; return; } curNode curNode.lchild; } } } }三、深度优先遍历深度优先遍历是指按照某种规则访问树中的所有节点且每个节点仅访问一次。三种主要的遍历方式先序遍历根节点 → 左子树 → 右子树中序遍历左子树 → 根节点 → 右子树后序遍历左子树 → 右子树 → 根节点这里的先、中、后指的是根节点被访问的时机。3.1先序遍历访问顺序1访问根节点2先序遍历左子树3先序遍历右子树//先序遍历 public void beforeOrder(TreeNode root){ if(root null){ return; } System.out.println(root.data); //访问根节点 beforeOrder(root.lchild); //先序遍历左子树 beforeOrder(root.rchild); //先序遍历右子树 }我们以上图排序树为例给出遍历过程1访问根节点52遍历5的左子树3为根访问3遍历3的左子树0为根访问00无左子树0无右子树遍历3的右子树4为根访问44无左子树4无右子树3遍历5的右子树7为根访问7遍历7的左子树6为根访问66无左子树6无右子树遍历7的右子树9为根访问99无左子树9无右子树结果5 3 0 4 7 6 9先序遍历的输出整体看是从根到左再到右所以先序遍历适合用在复制树的结构和前缀表达式中3.2中序遍历访问顺序1中序遍历左子树2访问根节点3中序遍历右子树//中序遍历 public void inOrder(TreeNode root){ if(root null){ return; } inOrder(root.lchild); //中序遍历左子树 System.out.println(root.data); //访问根节点 inOrder(root.rchild); //中序遍历右子树 }遍历分析过程与上面先序同理中序遍历上图结果0 3 4 5 6 7 9我们不难发现中序遍历结果是顺序的所以中序遍历适合二叉排序树的有序输出3.3后续遍历访问顺序1后序遍历左子树2后序遍历右子树3访问根节点//后续遍历 public void afterOrder(TreeNode root){ if(root null){ return; } afterOrder(root.lchild); //后续遍历左子树 afterOrder(root.rchild); //后续遍历右子树 System.out.println(root.data); //访问根节点 }遍历上述图结果0 4 3 6 9 7 5后序遍历整体输出是从叶子节点到根节点所以后序遍历适合用在删除树和后缀表达式中四、广度优先遍历广度优先遍历又称层次遍历原理是按层次从上到下访问节点同一层从左到右访问使用队列先进先出保证访问顺序。以下是代码流程1根节点先入队2循环执行队列不为空时1.队头节点出队并访问该节点2.如果该节点的左孩子节点存在则左孩子节点入队3.如果该节点的右孩子节点存在则右孩子节点入队3直到队列为空//层次遍历 public void levelOrder(TreeNode root){ LinkedListTreeNode linklist new LinkedListTreeNode(); linklist.add(root); while(!linklist.isEmpty()){ root linklist.pop(); System.out.println(root.data); if(root.lchild ! null){ linklist.add(root.lchild); } if (root.rchild ! null){ linklist.add(root.rchild); } } }五、查找算法二叉排序树的查找可以递归实现先判断是否为空树然后判断根节点是否为要找的目标节点最后判断如果根节点大于目标节点则递归返回把根节点左孩子作为形参否则递归返回根节点右孩子作为形参。public TreeNode find(TreeNode root,Integer target){ if(root null){ return null; } if(Objects.equals(root.data, target)){ return root; } else if(root.data target){ return find(root.lchild,target); }else { return find(root.rchild,target); } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询