<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Hexise's Blog

    業(yè)精于勤荒于嬉 行成于思?xì)в陔S
    posts - 13, comments - 12, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    樹節(jié)點定義:

    class?TreeNode?{
    ????
    public?TreeNode?left;

    ????
    public?TreeNode?right;

    ????
    public?int?value;

    ????
    public?TreeNode(TreeNode?left,?TreeNode?right,?int?value)?{
    ????????
    this.left?=?left;
    ????????
    this.right?=?right;
    ????????
    this.value?=?value;
    ????}

    }

    二叉樹及其操作:

    public?class?BinaryTree?{

    ????
    public?static?int?getTreeHeight(TreeNode?root)?{
    ????????
    if?(root?==?null)
    ????????????
    return?0;
    ????????
    if?(root.left?==?null?&&?root.right?==?null)
    ????????????
    return?1;
    ????????
    return?1?+?Math
    ????????????????.max(getTreeHeight(root.left),?getTreeHeight(root.right));
    ????}


    ????
    public?static?void?recursePreOrder(TreeNode?root)?{
    ????????
    if?(root?==?null)
    ????????????
    return;
    ????????System.out.println(root.value);
    ????????
    if?(root.left?!=?null)
    ????????????recursePreOrder(root.left);
    ????????
    if?(root.right?!=?null)
    ????????????recursePreOrder(root.right);
    ????}


    ????
    public?static?void?stackPreOrder(TreeNode?root)?{
    ????????Stack?stack?
    =?new?Stack();
    ????????
    if?(root?==?null)
    ????????????
    return;
    ????????stack.push(root);
    ????????System.out.println(root.value);
    ????????TreeNode?temp?
    =?root.left;
    ????????
    while?(temp?!=?null)?{
    ????????????stack.push(temp);
    ????????????System.out.println(temp.value);
    ????????????temp?
    =?temp.left;
    ????????}

    ????????temp?
    =?(TreeNode)?stack.pop();
    ????????
    while?(temp?!=?null)?{
    ????????????temp?
    =?temp.right;
    ????????????
    while?(temp?!=?null)?{
    ????????????????stack.push(temp);
    ????????????????System.out.println(temp.value);
    ????????????????temp?
    =?temp.left;
    ????????????}

    ????????????
    if?(stack.empty())
    ????????????????
    break;
    ????????????temp?
    =?(TreeNode)?stack.pop();
    ????????}

    ????}


    ????
    public?static?void?recurseInOrder(TreeNode?root)?{
    ????????
    if?(root?==?null)
    ????????????
    return;
    ????????
    if?(root.left?!=?null)
    ????????????recurseInOrder(root.left);
    ????????System.out.println(root.value);
    ????????
    if?(root.right?!=?null)
    ????????????recurseInOrder(root.right);
    ????}


    ????
    public?static?void?stackInOrder(TreeNode?root)?{
    ????????Stack?stack?
    =?new?Stack();
    ????????
    if?(root?==?null)
    ????????????
    return;
    ????????
    else
    ????????????stack.push(root);
    ????????TreeNode?temp?
    =?root.left;
    ????????
    while?(temp?!=?null)?{
    ????????????stack.push(temp);
    ????????????temp?
    =?temp.left;
    ????????}

    ????????temp?
    =?(TreeNode)?stack.pop();
    ????????
    while?(temp?!=?null)?{
    ????????????System.out.println(temp.value);
    ????????????temp?
    =?temp.right;
    ????????????
    while?(temp?!=?null)?{
    ????????????????stack.push(temp);
    ????????????????temp?
    =?temp.left;
    ????????????}

    ????????????
    if?(stack.empty())
    ????????????????
    break;
    ????????????temp?
    =?(TreeNode)?stack.pop();
    ????????}

    ????}


    ????
    public?static?void?main(String[]?args)?{
    ????????TreeNode?node1?
    =?new?TreeNode(null,?null,?1);
    ????????TreeNode?node2?
    =?new?TreeNode(null,?node1,?2);
    ????????TreeNode?node3?
    =?new?TreeNode(null,?null,?3);
    ????????TreeNode?node4?
    =?new?TreeNode(node2,?node3,?4);
    ????????TreeNode?node5?
    =?new?TreeNode(null,?null,?5);
    ????????TreeNode?root?
    =?new?TreeNode(node4,?node5,?0);
    ????????System.out.println(
    "Tree?Height?is?"?+?getTreeHeight(root));
    ????????System.out.println(
    "Recurse?In?Order?Traverse");
    ????????recurseInOrder(root);
    ????????System.out.println(
    "Stack?In?Order?Traverse");
    ????????stackInOrder(root);
    ????????System.out.println(
    "Recurse?Pre?Order?Traverse");
    ????????recursePreOrder(root);
    ????????System.out.println(
    "Stack?Pre?Order?Traverse");
    ????????stackPreOrder(root);
    ????}

    }

    用LinkedList重寫的Stack:

    import?java.util.EmptyStackException;
    import?java.util.LinkedList;

    public?class?Stack?{

    ????
    private?LinkedList?list;

    ????
    public?Stack()?{
    ????????
    this.list?=?new?LinkedList();
    ????}


    ????
    public?boolean?empty()?{
    ????????
    return?list.isEmpty();
    ????}


    ????
    public?Object?peek()?{
    ????????
    if?(empty())
    ????????????
    throw?new?EmptyStackException();
    ????????
    return?list.getLast();
    ????}


    ????
    public?Object?pop()?{
    ????????
    if?(empty())
    ????????????
    throw?new?EmptyStackException();
    ????????
    return?list.removeLast();
    ????}


    ????
    public?void?push(Object?o)?{
    ????????list.add(o);
    ????}


    ????
    public?static?void?main(String[]?args)?{
    ????????Stack?stack?
    =?new?Stack();
    ????????stack.push(
    new?Integer(1));
    ????????stack.push(
    new?Integer(11));
    ????????stack.push(
    new?Integer(1111));
    ????????stack.push(
    new?Integer(22));
    ????????stack.push(
    new?Integer(222));
    ????????stack.push(
    new?Integer(31));
    ????????stack.push(
    new?Integer(221));
    ????????
    while?(!stack.empty())?{
    ????????????System.out.println(stack.pop());
    ????????}

    ????}

    }

    評論

    # re: [復(fù)習(xí)基礎(chǔ)]Java的二叉樹遍歷操作(遞歸, 非遞歸)  回復(fù)  更多評論   

    2007-06-26 11:35 by Hexise
    [更新]加入廣度遍歷的BinaryTree:
     
    public class BinaryTree {
        
    public static int getTreeHeight(TreeNode root) {
            
    if (root == null)
                
    return 0;
            
    if (root.left == null && root.right == null)
                
    return 1;
            
    return 1 + Math
                    .max(getTreeHeight(root.left), getTreeHeight(root.right));
        }


        
    public static void recursePreOrder(TreeNode root) {
            
    if (root == null)
                
    return;
            visit(root);
            
    if (root.left != null)
                recursePreOrder(root.left);
            
    if (root.right != null)
                recursePreOrder(root.right);
        }


        
    public static void stackPreOrder(TreeNode root) {
            Stack stack 
    = new Stack();
            
    if (root == null)
                
    return;
            stack.push(root);
            visit(root);
            TreeNode temp 
    = root.left;
            
    while (temp != null{
                stack.push(temp);
                visit(temp);
                temp 
    = temp.left;
            }

            temp 
    = (TreeNode) stack.pop();
            
    while (temp != null{
                temp 
    = temp.right;
                
    while (temp != null{
                    stack.push(temp);
                    visit(temp);
                    temp 
    = temp.left;
                }

                
    if (stack.empty())
                    
    break;
                temp 
    = (TreeNode) stack.pop();
            }

        }


        
    public static void recurseInOrder(TreeNode root) {
            
    if (root == null)
                
    return;
            
    if (root.left != null)
                recurseInOrder(root.left);
            visit(root);
            
    if (root.right != null)
                recurseInOrder(root.right);
        }


        
    public static void stackInOrder(TreeNode root) {
            Stack stack 
    = new Stack();
            
    if (root == null)
                
    return;
            
    else
                stack.push(root);
            TreeNode temp 
    = root.left;
            
    while (temp != null{
                stack.push(temp);
                temp 
    = temp.left;
            }

            temp 
    = (TreeNode) stack.pop();
            
    while (temp != null{
                visit(temp);
                temp 
    = temp.right;
                
    while (temp != null{
                    stack.push(temp);
                    temp 
    = temp.left;
                }

                
    if (stack.empty())
                    
    break;
                temp 
    = (TreeNode) stack.pop();
            }

        }

        
        
    public static void widthTraverse(TreeNode root) {
            Queue queue 
    = new Queue();
            queue.push(root);
            traverseLevel(queue);
        }

        
        
    public static void traverseLevel(Queue queue){
            
    for(int i=0; i<queue.size(); i++){
                TreeNode node 
    = (TreeNode)queue.pop();
                visit(node);
                
    if(node.left != null)
                    queue.push(node.left);
                
    if(node.right != null)
                    queue.push(node.right);
            }

            
    if(queue.size() > 0)
                traverseLevel(queue);
        }


        
    private static void visit(TreeNode node) {
            System.out.println(node.value);
        }


        
    public static void main(String[] args) {
            TreeNode node1 
    = new TreeNode(nullnull1);
            TreeNode node2 
    = new TreeNode(null, node1, 2);
            TreeNode node3 
    = new TreeNode(nullnull3);
            TreeNode node4 
    = new TreeNode(node2, node3, 4);
            TreeNode node5 
    = new TreeNode(nullnull5);
            TreeNode root 
    = new TreeNode(node4, node5, 0);
            System.out.println(
    "Tree Height is " + getTreeHeight(root));
            System.out.println(
    "Recurse In Order Traverse");
            recurseInOrder(root);
            System.out.println(
    "Stack In Order Traverse");
            stackInOrder(root);
            System.out.println(
    "Recurse Pre Order Traverse");
            recursePreOrder(root);
            System.out.println(
    "Stack Pre Order Traverse");
            stackPreOrder(root);
            System.out.println(
    "Width Traverse");
            widthTraverse(root);
        }


    }


    用LinkedList實現(xiàn)的Queue:
     
    import java.util.EmptyStackException;
    import java.util.LinkedList;

    public class Queue {
        
    private LinkedList list;

        
    public Queue() {
            
    this.list = new LinkedList();
        }


        
    public boolean empty() {
            
    return list.isEmpty();
        }


        
    public Object peek() {
            
    if (empty())
                
    throw new EmptyStackException();
            
    return list.getFirst();
        }


        
    public Object pop() {
            
    if (empty())
                
    throw new EmptyStackException();
            
    return list.removeFirst();
        }


        
    public void push(Object o) {
            list.add(o);
        }

        
        
    public int size(){
            
    return list.size();
        }


        
    public static void main(String[] args) {
            Queue queue 
    = new Queue();
            queue.push(
    new Integer(1));
            queue.push(
    new Integer(11));
            queue.push(
    new Integer(1111));
            queue.push(
    new Integer(22));
            queue.push(
    new Integer(222));
            queue.push(
    new Integer(31));
            queue.push(
    new Integer(221));
            
    while (!queue.empty()) {
                System.out.println(queue.pop());
            }

        }

    }

    # re: [復(fù)習(xí)基礎(chǔ)]Java的二叉樹遍歷操作(遞歸, 非遞歸)  回復(fù)  更多評論   

    2007-09-02 14:36 by diligentjason
    我用generics 也寫了一個

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费大学生国产在线观看p| 中文字幕第一页亚洲| 亚洲色欲色欲www在线丝 | 97亚洲熟妇自偷自拍另类图片| 精品久久亚洲中文无码| 四虎影视久久久免费| 足恋玩丝袜脚视频免费网站| 国产jizzjizz免费视频| 亚洲人成影院在线| 精品在线视频免费| 亚洲免费观看网站| 亚洲日韩国产精品乱| 国产精品亚洲自在线播放页码| 一级黄色毛片免费看| 黄色成人网站免费无码av| 亚洲色欲久久久综合网| 亚洲人成色77777在线观看| 免费人成网站在线观看不卡| 国产美女无遮挡免费视频| 亚洲色图在线观看| 无遮挡国产高潮视频免费观看| 免费H网站在线观看的| 黑人精品videos亚洲人| 亚洲av无码日韩av无码网站冲| 免费国产黄网站在线观看可以下载| www国产亚洲精品久久久日本| 亚洲不卡中文字幕| 免费精品一区二区三区第35| 四虎永久免费影院| 国产成人亚洲合集青青草原精品| 男女午夜24式免费视频| 免费少妇a级毛片| 亚洲中文无码亚洲人成影院| 少妇人妻偷人精品免费视频| 亚洲午夜无码片在线观看影院猛| 亚洲熟女精品中文字幕| 妻子5免费完整高清电视| 亚洲av永久无码精品古装片| 一级毛片在线免费播放| 国产极品美女高潮抽搐免费网站| 亚洲天堂电影在线观看|