day21--二叉树的深度遍历的递归实现

学习二叉树的定义,使用递归方法,先序遍历,中序遍历,后续遍历,求数的深度,以及节点总数。

代码:

package com.two;

/**
 * Binary tree with char type elements
 */
public class BinaryCharTree {

    char value;

    BinaryCharTree leftChild;

    BinaryCharTree rightChild;

    public BinaryCharTree(char paraValue) {
        this.value = paraValue;
        rightChild = null;
        leftChild = null;
    }// of the constructor

    public static BinaryCharTree manualConstructTree() {
        //Step 1. construct a tree with only one node
        BinaryCharTree resultTree = new BinaryCharTree('a');

        //Step 2.construct all nodes
        BinaryCharTree tempTreeB = new BinaryCharTree('b');
        BinaryCharTree tempTreeC = new BinaryCharTree('c');
        BinaryCharTree tempTreeD = new BinaryCharTree('d');
        BinaryCharTree tempTreeE = new BinaryCharTree('e');
        BinaryCharTree tempTreeF = new BinaryCharTree('f');
        BinaryCharTree tempTreeG = new BinaryCharTree('g');

        //Step 3.Link all nodes.
        resultTree.leftChild = tempTreeB;
        resultTree.rightChild = tempTreeC;
        tempTreeB.rightChild = tempTreeD;
        tempTreeC.leftChild = tempTreeE;
        tempTreeD.leftChild = tempTreeF;
        tempTreeD.rightChild = tempTreeG;

        return resultTree;

    }// of manualConstructTree


    public void preOrderVisit() {

        System.out.println("" +value + "");
        if (leftChild != null) {
            leftChild.preOrderVisit();
        }// of if

        if (rightChild != null) {
            rightChild.preOrderVisit();
        }// of if
    }// of preOrderVisit

    public void inOrderVisit() {


        if (leftChild != null) {
            leftChild.inOrderVisit();
        }// of if

        System.out.println("" +value + "");

        if (rightChild != null) {
            rightChild.inOrderVisit();
        }// of if
    }// of inOrderVisit

    public void postOrderVisit() {


        if (leftChild != null) {
            leftChild.postOrderVisit();
        }// of if

        if (rightChild != null) {
            rightChild.postOrderVisit();
        }// of if

        System.out.println("" +value + "");


    }// of postOrderVisit

    public int getDepth() {
        //it is a leaf.
        if((rightChild == null)&&(leftChild == null)) {
            return 1;
        }// of if
        int tempLeftDepth = 0;
        if(leftChild != null)  {
            tempLeftDepth =  leftChild.getDepth();
        }// of if

        int tempRightDepth = 0;
        if(rightChild != null)  {
            tempRightDepth =  rightChild.getDepth();
        }

        if (tempLeftDepth >= tempRightDepth) {
            return tempLeftDepth + 1;
        }else {
            return tempRightDepth + 1;
        }// of if
    }// of getDepth

    public int getNumNodes() {
        if((rightChild == null)&&(leftChild == null)) {
            return 1;
        }// of if
        int tempLeftNodes = 0;
        if(leftChild != null)  {
            tempLeftNodes =  leftChild.getNumNodes();
        }// of if

        int tempRightNodes = 0;
        if(rightChild != null)  {
            tempRightNodes =  rightChild.getNumNodes();
        }

        return tempLeftNodes + tempRightNodes + 1;
    }// of getNumNodes

    public static void main(String[] args) {
        BinaryCharTree tempTree  = manualConstructTree();
        System.out.println("\r\nPreOrder visit: ");
        tempTree.preOrderVisit();

        System.out.println("\r\nInOrder visit: ");
        tempTree.inOrderVisit();

        System.out.println("\r\nPostOrder visit: ");
        tempTree.postOrderVisit();

        System.out.println("\r\n\r\nThe depth is: " + tempTree.getDepth());
        System.out.println("The number of nodes is: " + tempTree.getNumNodes());

    }// of main
}// of class BinaryCharTree

运行结果:

PreOrder visit: 
a
b
d
f
g
c
e

InOrder visit: 
b
f
d
g
a
e
c

PostOrder visit: 
f
g
d
b
e
c
a


The depth is: 4
The number of nodes is: 7
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值