博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树附加删除算法
阅读量:6923 次
发布时间:2019-06-27

本文共 3079 字,大约阅读时间需要 10 分钟。

public class Tree {        TreeNode last = null;    TreeNode root = null;            public Tree(int value){        root = createNode(value);    }            //结构     static class TreeNode{         int data;         TreeNode left;         TreeNode right;      }          //查找结点     public TreeNode searchTreeNode(int key,TreeNode tree){         TreeNode keyNode = null;         if(tree == null){             return tree;         }         if(tree.data == key){             return tree;         }else if(key < tree.data ){             last = tree;             keyNode = searchTreeNode(key,tree.left);         }else if(key > tree.data){             last = tree;             keyNode = searchTreeNode(key,tree.right);         }         return keyNode;     }               //添加节点     public void addTreeNode(int key){         if(searchTreeNode(key,root) == null){             TreeNode tree = createNode(key);             if(key < last.data){                 last.left = tree;             }else if(key > last.data){                 last.right = tree;             }         }         last = null;     }          //遍历     public void iterate(TreeNode node){        if(node ==null){            return;        }        System.out.println(node.data);        iterate(node.left);        iterate(node.right);     }         public TreeNode createNode(int key){        TreeNode tree = new TreeNode();        tree.data = key;        return tree;     }          public void removeNode(int key){         TreeNode tree = searchTreeNode(key,root);         if(tree.left == null && tree.right == null){                      }         //如果右节点为空       当前节点取代左节点         else if(tree.right == null){             tree.data = tree.left.data;        // 把当前的左节点指向需要删除的左节点的左节点             tree.right = tree.left.right;        // 把删除节点的右节点指向删除节点的左节点右节点             tree.data = tree.left.data;        // SET删除节点的值         }else if(tree.left  == null){             tree.right = tree.right.right;             tree.left = tree.right.left;             tree.data = tree.right.data;         }else{             //如果左右都不为空             //获得右树最小的一个             TreeNode nodeRight = tree.right;             TreeNode lastLeftParent = null;             while(nodeRight.left != null){                 lastLeftParent = nodeRight;                 nodeRight = nodeRight.left;             }                                      tree.data = nodeRight.data;                 if(lastLeftParent != null)                 lastLeftParent.left = nodeRight.right;    // 链接右子树             else                 tree.right = nodeRight.right;            // 链接右子树         }     }          public static void main(String[] args){         Tree tree = new Tree(4);         tree.addTreeNode(5);         tree.addTreeNode(6);         tree.addTreeNode(3);         tree.addTreeNode(7);         tree.addTreeNode(8);         tree.addTreeNode(9);        //         System.out.println(tree.searchTreeNode(7, tree.root).data);         System.out.println("---");         tree.iterate(tree.root);     }     }

 

转载于:https://www.cnblogs.com/JimmyXie/p/3714664.html

你可能感兴趣的文章
基于BC实现的(JAVA版)SM2国密算法签名验签DEMO
查看>>
分布式缓存架构设计
查看>>
初学者学习arm嵌入式有什么好的建议?嵌入式开发学习
查看>>
经验分享:如何合并pdf文件
查看>>
到底该怎么理解平均负载
查看>>
文件特殊权限
查看>>
Oracle 高水位线
查看>>
Oracle 数据库QUIESCE状态详解
查看>>
oracle 10g数据泵和导入导出性能对比(二)
查看>>
ORACLE SQL语句优化
查看>>
PIE SDK应用掩膜
查看>>
MySQL(二):特性详解
查看>>
DRBD的使用配置
查看>>
一个简单的串口程序
查看>>
rsync: failed to connect to 192.168.2.9: Connection refused
查看>>
操作系统无人值守自动安装之Windows XP
查看>>
Nginx 忽略URL大小写配置
查看>>
jenkins自动发布java代码
查看>>
如何查看已安装的CentOS版本信息
查看>>
网页背景设置
查看>>