Tree

作者: 綿綿_ | 来源:发表于2019-03-29 21:02 被阅读0次

带父节点的二叉树的链式储存结构

class ChainTreeType
    {
        char NodeData; //data of nodes
        ChainTree LNode; //reference of left node
        ChainTree RNode;
        Chain PNode;
    }
    ChainTreeType root=null; //define root reference

初始化二叉树

CBTType InitTree()
    {
        CBTType node;
        if ((node=new CBTType())!=null)
        {
            System.out.println("enter a root data");
            node.data=input.next();
            node.left=null;
            node.right=null;
            
            if(node!=null)
            {
                return node;
            }
            else
            {
                return null;
            }
        }
        return null;
    }

增加结点

void AddTreeNode(CBTType treeNode)
    {
        CBTType pnode,parent;
        String data;
        int menusel;
        
        if((pnode=new CBTType())!=null)
        {
            System.out.println("enter node data");
            pnode.data=input.next();
            pnode.left=null;
            pnode.right=null;
            
            System.out.println("enter the parent's data of this node");
            data=input.next();
            
            parent= TreeFindNode(treeNOde,data);
            if(parent==null)
            {
                System.out.println("cannot find this parent node");
                pnode=null; //release memory
                return;
            }
            System.out.print("1.add this node to left\n,"
                    + "2.add this node to the right\n");
            do {
                menusel =input.nextInt();
                if(menusel ==1 || menusel ==2)
                {
                    if(parent==null)
                    {
                        System.out.println("no parent node, set parent node first");
                        
                    }else
                    {
                        switch(menusel) 
                        {
                          case 1:
                              if (parent.left!=null)
                              {
                                  System.out.println("the left node is not empty");
                              }
                              else
                              {
                                  parent.left=pnode;
                              }
                              break;
                          case 2 :
                              if (parent.right!=null)
                              {
                                  System.out.println("the right node is not empty");
                              }
                              else
                              {
                                  parent.right=pnode;
                              }
                              break;
                            default:
                                System.out.println("invalid data");
                        }
                    }
                }
            }while(menusel != 1 && menusel !=2);
        }
    }

查找结点

    CBTType TreeFindNode(CBTType treeNode, String data)
    {
        CBTType ptr;
        if (treeNode==null)
        {
            return null;
        }
        else
        {
            if (treeNOde.data.equals(data))
            {
                return treeNode;
            }
            else
            {           //search left and right recursively
                if ((ptr=TreeFindNode(treeNode.left,data))!=null)
                {
                    return ptr;
                }
                else if ((ptr=TreeFindNode(treeNode.right,data))!=null)
                {
                    return ptr;
                }
                else 
                {
                    return null;
                }
            }
        }
        
    }

获取左子树

CBTType TreeLeftNode(CBTType treeNode)
    {
        if(treeNode!= null)
        {
            return treeNode.left;
        }
        else {
            return null;
        }
    }

判断空树

int TreeIsEmpty(CBTType treeNode)
    {
        if (treeNode!=null)
        {
            return 0
        }
        else
        {
            return 1;
        }
    }

计算二叉树的深度

int TreeDepth(CBTType treeNode)
    {
        int depleft,depright;
        if (treeNode==null)
        {
            return 0;
        }
        else
        {
            depleft=TreeDepth(treeNode.left); //recursively
            depright=TreeDepth(treeNode.right);
            if (depleft>depright)
            {
                return depleft+1;
            }else
            {
                return depright+1;
            }
        }
    }

清空二叉树

 void ClearTree(CBTType treeNode)
    {
        if (treeNode!=null)
        {
            ClearTree(treeNode.left);
            ClearTree(treeNode.right);
            treeNode=null;
        }
    }

按层遍历

void levelTree (CBTType treeNode)
    {
        CBTType p;
        CBTType[] q=new CBTType[MAXLEN];//define a sequential stack
        int head =0, tail=0;
        
        if(treeNode!=null)
        {
            tail=(tail+1)%MAXLEN;
            q[tail]=treeNode;
        }
        while(head!=tail)
        {
            head=(head+1)%MAXLINE;
            p=q[head];
            TreeNodeData(p);
            if(p.left!=null)
            {
                tail=(tail+1)%MAXLEN;
                q[tail]=p.left;
            }
            if(p.right!=null)
            {
                tail=(tail+1)%MAXLEN;
                q[tail]=p.right;
            }
        }
    }

前序遍历(DLR)

void DLRTree(CBTType treeNode)
    {
        if(treeNode!=null) //treeNode is the root
        {
            TreeNodeData(treeNode);
            DLRTree(treeNode.left);
            DLRTree(treeNode.right);
        }
    }

中序遍历(LDR)

void LDRTree(CBTType treeNode)
    {
        if(treeNode!=null)
        {
            LDRTree(treeNode.left);
            TreeNodeData(treeNode);
            LDRTree(treeNode.right);
        }
    }

后序遍历(LRD)

void LRDTree(CBTType treeNode)
    {
        if (treeNode!=null)
        {
            LRDTree(treeNode.left);
            LRDTree(treeNode.right);
            TreeNodeData(treeNode);
        }
    }

相关文章

网友评论

      本文标题:Tree

      本文链接:https://www.haomeiwen.com/subject/seqrbqtx.html