二叉搜索树的遍历插入新节点val及判断是否存在val(代码及注释)
Posted 王嘻嘻-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉搜索树的遍历插入新节点val及判断是否存在val(代码及注释)相关的知识,希望对你有一定的参考价值。
源代码
代码展示:
package bin_tree.seachtree;
/**
* 基于整形的普通二分搜索树
* @author wyc
* @date 2022/03/16 18:20
**/
public class BST
private class TreeNode
private int val;
private TreeNode left;
private TreeNode right;
public TreeNode(int val)
this.val = val;
private int size;
private TreeNode root;
public void add(int val)
root = add(root,val);
/**
* 判断当前树中是否存在val
* @param val
* @return
*/
public boolean contains(int val)
return contains(root,val);
/**
* 判断当前以root为根的BST中是否包含了val
* @param root
* @param val
* @return
*/
private boolean contains(TreeNode root, int val)
//边界
if (root == null)
return false;
if (root.val == val)
//找到val了
return true;
else if (val < root.val)
//val在左树中
return contains(root.left,val);
else
//val在右树中
return contains(root.right,val);
/**
* 向以root为根的BST中插入一个新的节点val
* @param root
* @param val
* @return
*/
private TreeNode add(TreeNode root, int val)
if (root == null)
//创建新节点
TreeNode newNode = new TreeNode(val);
//当前值就是根节点
size++;
return newNode;
//该二叉搜索树不为空,向该树中添加元素
//判断添加元素val的值与root节点的大小关系
if (val < root.val)
//此时向左子树中添加元素
//采用递归
root.left = add(root.left,val);
if (val > root.val)
//此时在右子树中添加元素val
root.right = add(root.right,val);
//最后返回根节点
return root;
@Override
public String toString()
StringBuilder sb = new StringBuilder();
generateBSTString(root,0,sb);
return sb.toString();
/**
* 先序遍历以root为根的BST,将节点值存储再sb中
* @param root
* @param height
* @param sb
*/
private void generateBSTString(TreeNode root, int height, StringBuilder sb)
//边界
if (root == null)
sb.append(generateHeightStr(height)).append("NULL\\n");
return;
sb.append(generateHeightStr(height)).append(root.val).append("\\n");
//递归访问左子树
generateBSTString(root.left,height + 1,sb);
//递归访问右子树
generateBSTString(root.right,height + 1,sb);
/**
* 按照当前所处的树的层次打印~
* 每多一层,就多两个~
* @param height
* @return
*/
private String generateHeightStr(int height)
StringBuilder sb = new StringBuilder();
for (int i = 0; i < height; i++)
sb.append("--");
return sb.toString();
测试代码:
package bin_tree.seachtree;
/**
* @author wyc
* @date 2022/03/16 18:46
**/
public class BSTTest
public static void main(String[] args)
int[] data = 28,16,30,13,22,29,42;
BST bst = new BST();
for (int i : data)
bst.add(i);
// System.out.println(bst);
System.out.println(bst.contains(29));//true
System.out.println(bst.contains(100));//false
本节完^_^
以上是关于二叉搜索树的遍历插入新节点val及判断是否存在val(代码及注释)的主要内容,如果未能解决你的问题,请参考以下文章