zoukankan      html  css  js  c++  java
  • 面试题18 :树的子结构

    题目:输入两颗二叉树 A 和 B,判断 B 是不是 A 的子结构。

    先判断根结点,相等,判断左右孩子结点,有一个不是,重新寻找根结点。

    package offer;
    import java.sql.Struct;
    //面试题 18:树的子结构
    //题目:输入两颗二叉树 A 和 B,判断 B 是不是 A 的子结构。
    public class Problem18 {
        static class BinaryTreeNode {
            int value;
            BinaryTreeNode leftNode;
            BinaryTreeNode rightNode;
        }
        public static void main(String args[]) {    
            BinaryTreeNode root1 = new BinaryTreeNode();
            BinaryTreeNode node1 = new BinaryTreeNode();
            BinaryTreeNode node2 = new BinaryTreeNode();
            BinaryTreeNode node3 = new BinaryTreeNode();
            BinaryTreeNode node4 = new BinaryTreeNode();
            BinaryTreeNode node5 = new BinaryTreeNode();
            BinaryTreeNode node6 = new BinaryTreeNode();
            root1.leftNode = node1;
            root1.rightNode = node2;
            node1.leftNode = node3;
            node1.rightNode = node4;
            node4.leftNode = node5;
            node4.rightNode = node6;
            root1.value = 8;
            node1.value = 8;
            node2.value = 7;
            node3.value = 9;
            node4.value = 2;
            node5.value = 4;
            node6.value = 7;
            BinaryTreeNode root2 = new BinaryTreeNode();
            BinaryTreeNode a = new BinaryTreeNode();
            BinaryTreeNode b = new BinaryTreeNode();
            root2.leftNode = a;
            root2.rightNode = b;
            root2.value = 8;
            a.value = 9;
            b.value = 2;
            Problem18 test = new Problem18();
            System.out.println(test.hasSubTree(root1, root2));
        }
        public boolean hasSubTree(BinaryTreeNode root1, BinaryTreeNode root2) {
            boolean result = false;
            if (root1 != null && root2 != null) {
                if (root1.value == root2.value) {
                    result = doesTree1HavaTree2(root1, root2);
                    if (!result)
                        result = hasSubTree(root1.leftNode, root2);
                    if (!result)
                        result = hasSubTree(root1.rightNode, root2);
                }
            }
            return result;
        }
        private boolean doesTree1HavaTree2(BinaryTreeNode root1, BinaryTreeNode root2) {
            if (root2 == null) {
                return true;
            }else if (root1 == null)
                return false;
            if (root1.value != root2.value) {
                return false;
            }
            return doesTree1HavaTree2(root1.leftNode, root2.leftNode)
                    && doesTree1HavaTree2(root1.rightNode, root2.rightNode);
        }
    }
  • 相关阅读:
    01 HTTP协议_servlet基础
    JS 08表单操作_表单域
    09 多态
    JS 07 Dom
    JS 06 bom 框窗_页面_定时任务
    JS 05 json
    08 包_继承
    JS 04 Date_Math_String_Object
    【Java每日一题】20161018
    【Java每日一题】20161017
  • 原文地址:https://www.cnblogs.com/newcoder/p/5797172.html
Copyright © 2011-2022 走看看