前序、中序、右序遍历tree(先存起来,不慎理解)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
<script>
  var tree = {
    "id": 0,
    "name": "root",
    "left": {
        "id": 1,
        "name": "Simon",
        "left": {
            "id": 3,
            "name": "Carl",
            "left": {
                "id": 7,
                "name": "Lee",
                "left": {
                    "id": 11,
                    "name": "Fate"
                }
            },
            "right": {
                "id": 8,
                "name": "Annie",
                "left": {
                    "id": 12,
                    "name": "Saber"
                }
            }
        },
        "right": {
            "id": 4,
            "name": "Tony",
            "left": {
                "id": 9,
                "name": "Candy"
            }
        }
    },
    "right": {
        "id": 2,
        "name": "right",
        "left": {
            "id": 5,
            "name": "Carl",
        },
        "right": {
            "id": 6,
            "name": "Carl",
            "right": {
                "id": 10,
                "name": "Kai"
            }        
        }
    }
}

// 假设id和name均不会重复,根据输入name找到对应的id
function findIdByName(name) {
  var id;
  function findName(obj) {
    if (obj != null) {
      if (obj.name == name) {
        id = obj.id;
        console.log(id);
      }
      findName(obj.left);
      findName(obj.right);
    }
  }
  findName(tree);
}

// 假设id和name均不会重复,根据输入id找到对应的name
function findNameById(id) {
  var name;
  function findId(obj) {
    if (obj != null) {
      if (obj.id == id) {
        name = obj.name;
        console.log(name);
      }
      findId(obj.left);
      findId(obj.right);
    }
  }
  findId(tree);
}

// 把这个对象中所有的名字以“前序遍历”的方式全部输出到console中
function getListWithDLR() {
  function preOrder(obj) {
    if (obj != null) {
      console.log(obj.name);
      preOrder(obj.left);
      preOrder(obj.right);
    }
  }
  preOrder(tree);
}

// 把这个对象中所有的名字以“中序遍历”的方式全部输出到console中
function getListWithLDR() {
  function inOrder(e) {
    if (e != null) {
      inOrder(e.left);
      console.log(e.name);
      inOrder(e.right);
    }
  }
  inOrder(tree);
}

// 把这个对象中所有的名字以“后序遍历”的方式全部输出到console中
function getListWithLRD() {
  function postOrder(E) {
    if (E != null) {
      postOrder(E.left);
      postOrder(E.right);
      console.log(E.name);
    }
  }
  postOrder(tree);
}
</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
树是一种常用的数据结构,具有分层的特点。在树的结构中,常常需要对树进行遍历操作,包括前序遍历中序遍历、后序遍历和层次遍历前序遍历(Preorder Traversal)是指先遍历根节点,再遍历左子树,最后遍历右子树。可以通过递归或者栈的方式实现前序遍历中序遍历(Inorder Traversal)是指先遍历左子树,再遍历根节点,最后遍历右子树。同样可以通过递归或者栈的方式实现中序遍历。 后序遍历(Postorder Traversal)是指先遍历左子树,再遍历右子树,最后遍历根节点。同样可以通过递归或者栈的方式实现后序遍历。 层次遍历(Level Order Traversal)是指从上到下逐层遍历树的节点。可以利用队列的方式实现层次遍历,先将根节点入队,然后依次将每个节点的左右子节点入队,直到队列为空。 在C语言中,可以利用结构体和指针表示树的节点,通过递归或者迭代的方式实现树的遍历操作。可以使用数组、链表或者队列等数据结构来辅助实现。 以下是一段C语言代码示例,演示了如何实现树的前序中序、后序和层次遍历操作: ```c #include <stdio.h> #include <stdlib.h> typedef struct TreeNode { int data; struct TreeNode* left; struct TreeNode* right; } TreeNode; // 前序遍历 void preorderTraversal(TreeNode* root) { if (root == NULL) return; printf("%d ", root->data); preorderTraversal(root->left); preorderTraversal(root->right); } // 中序遍历 void inorderTraversal(TreeNode* root) { if (root == NULL) return; inorderTraversal(root->left); printf("%d ", root->data); inorderTraversal(root->right); } // 后序遍历 void postorderTraversal(TreeNode* root) { if (root == NULL) return; postorderTraversal(root->left); postorderTraversal(root->right); printf("%d ", root->data); } // 层次遍历 void levelOrderTraversal(TreeNode* root) { if (root == NULL) return; TreeNode* queue[100]; // 使用数组模拟队列 int front = 0; int rear = 0; queue[rear++] = root; while (front < rear) { TreeNode* node = queue[front++]; printf("%d ", node->data); if (node->left != NULL) { queue[rear++] = node->left; } if (node->right != NULL) { queue[rear++] = node->right; } } } int main() { // 创建一棵树 TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode)); root->data = 1; root->left = (TreeNode*)malloc(sizeof(TreeNode)); root->right = (TreeNode*)malloc(sizeof(TreeNode)); root->left->data = 2; root->right->data = 3; root->left->left = NULL; root->left->right = NULL; root->right->left = NULL; root->right->right = NULL; printf("前序遍历结果:"); preorderTraversal(root); printf("\n中序遍历结果:"); inorderTraversal(root); printf("\n后序遍历结果:"); postorderTraversal(root); printf("\n层次遍历结果:"); levelOrderTraversal(root); return 0; } ``` 以上代码中,先定义了树的结构体`TreeNode`,包含数据、左子树指针和右子树指针。然后定义了四个遍历函数,根据不同的遍历方式实现相应的遍历过程。在`main`函数中,创建了一棵树,并调用四个遍历函数分别进行遍历操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值