在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

java怎么实现平衡二叉树

104次阅读
没有评论

共计 2999 个字符,预计需要花费 8 分钟才能阅读完成。

要实现平衡二叉树,可以使用红黑树或 AVL 树这样的自平衡二叉搜索树。
以下是使用 AVL 树实现平衡二叉树的示例代码:

// AVL 树节点类
class Node {

????int?val;

????int?height;

????Node?left;

????Node?right;

????Node(int?val)?{

????????this.val?=?val;

????????this.height?=?1;

????} } //?平衡二叉树类 class?AVLTree?{

????private?Node?root;

????//?获取节点的高度

????private?int?getHeight(Node?node)?{

????????if?(node?==?null)?{

????????????return?0;

????????}

????????return?node.height;

????}

????//?更新节点的高度

????private?void?updateHeight(Node?node)?{

????????node.height?=?Math.max(getHeight(node.left),?getHeight(node.right))?+?1;

????}

????//?获取节点的平衡因子

????private?int?getBalanceFactor(Node?node)?{

????????if?(node?==?null)?{

????????????return?0;

????????}

????????return?getHeight(node.left)?-?getHeight(node.right);

????}

????//?右旋操作

????private?Node?rightRotate(Node?node)?{

????????Node?newRoot?=?node.left;

????????node.left?=?newRoot.right;

????????newRoot.right?=?node;

????????updateHeight(node);

????????updateHeight(newRoot);

????????return?newRoot;

????}

????//?左旋操作

????private?Node?leftRotate(Node?node)?{

????????Node?newRoot?=?node.right;

????????node.right?=?newRoot.left;

????????newRoot.left?=?node;

????????updateHeight(node);

????????updateHeight(newRoot);

????????return?newRoot;

????}

????//?平衡节点

????private?Node?balance(Node?node)?{

????????if?(node?==?null)?{

????????????return?null;

????????}

????????updateHeight(node);

????????int?balanceFactor?=?getBalanceFactor(node);

????????if?(balanceFactor?>?1)?{

????????????if?(getBalanceFactor(node.left)?>=?0)?{

????????????????return?rightRotate(node);

????????????}?else?{

????????????????node.left?=?leftRotate(node.left);

????????????????return?rightRotate(node);

????????????}

????????}?else?if?(balanceFactor?<?-1)?{

????????????if?(getBalanceFactor(node.right)?<=?0)?{

????????????????return?leftRotate(node);

????????????}?else?{

????????????????node.right?=?rightRotate(node.right);

????????????????return?leftRotate(node);

????????????}

????????}

????????return?node;

????}

????//?插入节点

????public?void?insert(int?val)?{

????????root?=?insert(root,?val);

????}

????private?Node?insert(Node?node,?int?val)?{

????????if?(node?==?null)?{

????????????return?new?Node(val);

????????}

????????if?(val?<?node.val)?{

????????????node.left?=?insert(node.left,?val);

????????}?else?if?(val?>?node.val)?{

????????????node.right?=?insert(node.right,?val);

????????}?else?{

????????????//?如果树中已经存在相同值的节点,则不进行插入

????????????return?node;

????????}

????????return?balance(node);

????}

????//?中序遍历

????public?void?inorderTraversal()?{

????????inorderTraversal(root);

????}

????private?void?inorderTraversal(Node?node)?{

????????if?(node?==?null)?{

????????????return;

????????}

????????inorderTraversal(node.left);

????????System.out.print(node.val?+?"?");

????????inorderTraversal(node.right);

????} } //?测试代码 public?class?Main?{

????public?static?void?main(String[]?args)?{

????????AVLTree?tree?=?new?AVLTree();

????????tree.insert(3);

????????tree.insert(2);

????????tree.insert(1);

????????

????????tree.inorderTraversal();??//?输出:1?2?3

????} }

以上是使用 AVL 树实现平衡二叉树的示例代码,其中包含了插入节点、平衡节点和中序遍历等操作。你可以根据需要进行修改和扩展。

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-12发表,共计2999字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 国产私拍精品88福利视频 | 91福利国产在线观看网站 | 国产精品无码av片在线观看播 | 精品一区二区三区无码免费视频 | 亚洲一区免费观看 | 青青免费视频视频在线 | 欧美色视频在线 | 国产一区二区在线播放 | 欧美成a | 国产精品热久久毛片 | 欧美色视频在线观看免费视频 | 欧美亚洲激情视频 | 亚洲精品在线视频观看 | 少妇又色又爽又高潮 | 最色网在线观看 | 久久99精品久久久久久h | 富二代污视频 | 欧美大片毛片大片 | 两个人看的www免费高清 | 色姑娘综合网 | 亚洲欧洲淘宝天堂日本 | 亚洲毛片在线播放 | 伊人久久大香线蕉综合色狠狠 | 色天天天综合色天天 | 国产亚洲精品久久久闺蜜 | 高清视频一区二区 | 亚洲欧洲日产国码无码久久99 | 国产尤物在线观看 | 国产午夜伦鲁鲁 | 国产一区高清 | 四虎影院成人在线观看 | 99re热这里有精品首页视频 | 一本大道熟女人妻中文字幕在线 | 性夜影院午夜看片 | 高清国产精品久久久久 | 91精品国产免费久久久久久 | 欧美国产日本精品一区二区三区 | 国产成人精品视频免费 | 在线播放 亚洲 | 色狠狠av一区二区三区 | 中文字幕av无码一二三区电影 |