欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

树编码实践中的总结

程序员文章站 2022-07-10 21:09:07
...

 

方式一:按照中序遍历+中序遍历的递增链表可以创建二叉排序树---这个时候就是一个有序的树了

方式二:插入的时候比较顺序插入

 

二叉查找也是递归查找,按照前序的结构查找到就返回---将需要查找到的数据体放到排序树中,之后查找只要遍历1/2个元素

 

要实现什么功能需要在对象中加入相应的属性,例如加tag可以实现线索树

 

迭代过程中返回的是当前迭代最深层的,迭代方法之后返回的是最外层的

 

迭代一般的业务处理是采用前序的方式---进来就处理

定好框架,//迭代中最先的结束,才开始回溯切换执行下面的代码(包括迭代)

迭代节点赋值的方式1,迭代中的业务方法返回 new (可以赋值给上级)  用return迭代函数可以下级赋值给上级(跨级赋值),2,业务方法中new 赋值(本级赋值)

在迭代中越前面的调用就是越上级,下级的东西赋值给上级,--下级的迭代方法中返回  即上述的2,上级的调用处赋值 即上述的1 ----最终的树的赋值都是按这种思路赋值(各层之间跨的层数看前面迭代传入的参数和具体业务方法中用的参数级数)(搞清需求中的层级赋值关系就容易写出迭代)

 

 确定好需求中层级之间的值关系,迭代部分代码即可按照级数实现相应的跨级处理值(传的参数决定级数关系),到了深处尽头(命中业务条件)就知道其余要写的业务代码时什么

 

 

能确认的先写在,后面围着这个改

 

 插入实现二叉查找树的遍历---这个好

https://www.cnblogs.com/fingerboy/p/5493786.html

 

//在迭代中越前面的调用就是越上级,下级的东西赋值给上级,--下级的迭代方法中返回,上级的调用处赋值

      private Node<T> remove(T value, Node<T> t) {

         if(t==null){

             return t;

         }

         

         int result=value.compareTo(t.data);

         if(result<0){

             t.left=remove(value,t.left);

         }else if(result>0){

             t.right=remove(value,t.right);//各层之间跨的层数看前面迭代传入的参数和具体业务方法中用的参数级数

         }else if(t.left!=null&&t.right!=null){//如果被删除节点有两个儿子

             //1.当前节点值被其右子树的最小值代替

             t.data=findMin(t.right).data;

             //将右子树的最小值删除

             t.right=remove(t.data, t.right);//搞清需求中的层级赋值关系就容易写出迭代

         }else{

             //如果被删除节点是一个叶子 或只有一个儿子

             t=(t.left!=null)?t.left:t.right;

         }

         

         return t;

     }

 

 

 

//插入的形式创建二叉排序树

 

public  void insert(T value){

  

      insert(value,root);

 

}

 

 

public Node<T> insert(T value,Node<T> t){

 

       

           if(t==null){     //迭代一般的业务处理是采用前序的方式---进来就处理

     return  new Node(value);

   }

       if(value.compareTo(t.data)<0)

         t.Lchild= insert(value,t.lChild);  //迭代过程中返回的是当前迭代最深层的,迭代方法之后返回的是最外层的

 

      if(value.compareTo(t.data)>0)

        t.rChild=  insert(value,t.rChild);//搞清需求中的层级赋值关系就容易写出迭代

       

      return t;

}

 

 

 

//中序遍历

public void printTree(Node<T> root){

 

     if(root!=null){

         printTree(root.lChild);

 

system.out.print(root.data);

 

printTree(root.rChild);

 

 

     

     }

 

 

}

 

 

 

//前序输入,用空补足叶子节点(补足的是虚拟的树中不可看到的)====与排序无关

create(LinkList<String> qu,root){

   

      if(qu!=null){

        

           String data=qu.poll();

 

            if(data!=null){  //遇到null的就转向另一边

      root= new Node();

      root.data=data;

  root.create(qu,root.lChild);   //迭代中最先的结束,才开始回溯切换执行下面的代码(包括迭代)

  root.create(qu,root.rChild);

      }else{

           return null;

      }

      

      }

 

      return root;

 

}

 

 

 

 参考:

https://www.cnblogs.com/fingerboy/p/5493786.html

https://blog.csdn.net/jjf09/article/details/70530159

相关标签: 数据结构